编辑推荐
这是一部传世之作!**网络编程专家Bill Fenner和Andrew M. Rudoff应邀执笔,对W. Richard Stevens的经典作品进行修订。书中吸纳了近几年网络技术的发展,增添了IPv6、SCTP协议和密钥管理套接字等内容,深入讨论了**的关键标准、实现和技术。
书中的所有示例都是在UNIX系统上测试通过的真实的、可运行的代码,继承了Stevens一直强调的理念:“学习网络编程的*好方法就是下载这些程序,对其进行修改和改进。只有这样实际编写代码才能深入理解有关概念和方法。”读者可以从本书网站下载这些示例的源代码。
本书为UNIX网络编程提供全面的指导,是网络研究和开发人员公认的权威参考书,无论网络编程的初学者还是网络专家都会大受裨益。
内容简介
本书是一部UNIX网络编程的经典之作!书中全面深入地介绍了如何使用套接字API进行网络编程。全书不但介绍了基本编程内容,还涵盖了与套接字编程相关的高级主题,对于客户/服务器程序的各种设计方法也作了完整的探讨,最后还深入分析了流这种设备驱动机制。
本书内容详尽且具权威性,几乎每章都提供精选的习题,并提供了部分习题的答案,是网络研究和开发人员理想的参考书。
目录
- 第一部分 简介和TCP/IP
- 第1章 简介
- 1.1 概述
- 1.2 一个简单的时间获取客户程序
- 1.3 协议无关性
- 1.4 错误处理:包裹函数
- 1.5 一个简单的时间获取服务器程序
- 1.6 本书中客户/服务器程序示例索引表
- 1.7 OSI模型
- 1.8 BSD网络支持历史
- 1.9 测试用网络及主机
- 1.10 Unix标准
- 1.11 64位体系结构
- 1.12 小结
- 习题
- 第2章 传输层:TCP、UDP和SCTP
- 2.1 概述
- 2.2 总图
- 2.3 用户数据报协议(UDP)
- 2.4 传输控制协议(TCP)
- 2.5 流控制传输协议(SCTP)
- 2.6 TCP连接的建立和终止
- 2.7 TIME_WAIT状态
- 2.8 SCTP关联的建立和终止
- 2.9 端口号
- 2.10 TCP端口号与并发服务器
- 2.11 缓冲区大小及限制
- 2.12 标准因特网服务
- 2.13 常见因特网应用的协议使用
- 2.14 小结
- 习题
- 第二部分 基本套接字编程
- 第3章 套接字编程简介
- 3.1 概述
- 3.2 套接字地址结构
- 3.3 值—结果参数
- 3.4 字节排序函数
- 3.5 字节操纵函数
- 3.6 inet_aton、inet_addr和inet_ntoa函数
- 3.7 inet_pton和inet_ntop函数
- 3.8 sock_ntop和相关函数
- 3.9 readn、writen和readline函数
- 3.10 小结
- 习题
- 第4章 基本TCP套接字编程
- 4.1 概述
- 4.2 socket函数
- 4.3 connect函数
- 4.4 bind函数
- 4.5 listen函数
- 4.6 accept函数
- 4.7 fork和exec函数
- 4.8 并发服务器
- 4.9 close函数
- 4.10 getsockname和getpeername函数
- 4.11 小结
- 习题
- 第5章 TCP客户/服务器程序示例
- 5.1 概述
- 5.2 TCP回射服务器程序:main函数
- 5.3 TCP回射服务器程序:str_echo函数
- 5.4 TCP回射客户程序:main函数
- 5.5 TCP回射客户程序:str_cli函数
- 5.6 正常启动
- 5.7 正常终止
- 5.8 POSIX信号处理
- 5.9 处理SIGCHLD信号
- 5.10 wait和waitpid函数
- 5.11 accept返回前连接中止
- 5.12 服务器进程终止
- 5.13 SIGPIPE信号
- 5.14 服务器主机崩溃
- 5.15 服务器主机崩溃后重启
- 5.16 服务器主机关机
- 5.17 TCP程序例子小结
- 5.18 数据格式
- 5.19 小结
- 习题
- 第6章 I/O复用:select和poll函数
- 6.1 概述
- 6.2 I/O模型
- 6.3 select函数
- 6.4 str_cli函数(修订版)
- 6.5 批量输入
- 6.6 shutdown函数
- 6.7 str_cli函数(再修订版)
- 6.8 TCP回射服务器程序(修订版)
- 6.9 pselect函数
- 6.10 poll函数
- 6.11 TCP回射服务器程序(再修订版)
- 6.12 小结
- 习题
- 第7章 套接字选项
- 7.1 概述
- 7.2 getsockopt和setsockopt函数
- 7.3 检查选项是否受支持并获取默认值
- 7.4 套接字状态
- 7.5 通用套接字选项
- 7.6 IPv4套接字选项
- 7.7 ICMPv6套接字选项
- 7.8 IPv6套接字选项
- 7.9 TCP套接字选项
- 7.10 SCTP套接字选项
- 7.11 fcntl函数
- 7.12 小结
- 习题
- 第8章 基本UDP套接字编程
- 8.1 概述
- 8.2 recvfrom和sendto函数
- 8.3 UDP回射服务器程序:main函数
- 8.4 UDP回射服务器程序:dg_echo函数
- 8.5 UDP回射客户程序:main函数
- 8.6 UDP回射客户程序:dg_cli函数
- 8.7 数据报的丢失
- 8.8 验证接收到的响应
- 8.9 服务器进程未运行
- 8.10 UDP程序例子小结
- 8.11 UDP的connect函数
- 8.12 dg_cli函数(修订版)
- 8.13 UDP缺乏流量控制
- 8.14 UDP中的外出接口的确定
- 8.15 使用select函数的TCP和UDP回射服务器程序
- 8.16 小结
- 习题
- 第9章 基本SCTP套接字编程
- 9.1 概述
- 9.2 接口模型
- 9.3 sctp_bindx函数
- 9.4 sctp_connectx函数
- 9.5 sctp_getpaddrs函数
- 9.6 sctp_freepaddrs函数
- 9.7 sctp_getladdrs函数
- 9.8 sctp_freeladdrs函数
- 9.9 sctp_sendmsg函数
- 9.10 sctp_recvmsg函数
- 9.11 sctp_opt_info函数
- 9.12 sctp_peeloff函数
- 9.13 shutdown函数
- 9.14 通知
- 9.15 小结
- 习题
- 第10章 SCTP客户/服务器程序例子
- 10.1 概述
- 10.2 SCTP一到多式流分回射服务器程序:main函数
- 10.3 SCTP一到多式流分回射客户程序:main函数
- 10.4 SCTP流分回射客户程序:sctpstr_cli函数
- 10.5 探究头端阻塞
- 10.6 控制流的数目
- 10.7 控制终结
- 10.8 小结
- 习题
- 第11章 名字与地址转换
- 11.1 概述
- 11.2 域名系统
- 11.3 gethostbyname函数
- 11.4 gethostbyaddr函数
- 11.5 getservbyname和getservbyport函数
- 11.6 getaddrinfo函数
- 11.7 gai_strerror函数
- 11.8 freeaddrinfo函数
- 11.9 getaddrinfo函数:IPv6
- 11.10 getaddrinfo函数:例子
- 11.11 host_serv函数
- 11.12 tcp_connect函数
- 11.13 tcp_listen函数
- 11.14 udp_client函数
- 11.15 udp_connect函数
- 11.16 udp_server函数
- 11.17 getnameinfo函数
- 11.18 可重入函数
- 11.19 gethostbyname_r和gethostbyaddr_r函数
- 11.20 作废的IPv6地址解析函数
- 11.21 其他网络相关信息
- 11.22 小结
- 习题
- 第三部分 高级套接字编程
- 第12章 IPv4与IPv6的互操作性
- 12.1 概述
- 12.2 IPv4客户与IPv6服务器
- 12.3 IPv6客户与IPv4服务器
- 12.4 IPv6地址测试宏
- 12.5 源代码可移植性
- 12.6 小结
- 习题
- 第13章 守护进程和inetd超级服务器
- 13.1 概述
- 13.2 syslogd守护进程
- 13.3 syslog函数
- 13.4 daemon_init函数
- 13.5 inetd守护进程
- 13.6 daemon_inetd函数
- 13.7 小结
- 习题
- 第14章 高级I/O函数
- 14.1 概述
- 14.2 套接字超时
- 14.3 recv和send函数
- 14.4 readv和writev函数
- 14.5 recvmsg和sendmsg函数
- 14.6 辅助数据
- 14.7 排队的数据量
- 14.8 套接字和标准I/O
- 14.9 高级轮询技术
- 14.10 T/TCP:事务目的TCP
- 14.11 小结
- 习题
- 第15章 Unix域协议
- 15.1 概述
- 15.2 Unix域套接字地址结构
- 15.3 socketpair函数
- 15.4 套接字函数
- 15.5 Unix域字节流客户/服务器程序
- 15.6 Unix域数据报客户/服务器程序
- 15.7 描述符传递
- 15.8 接收发送者的凭证
- 15.9 小结
- 习题
- 第16章 非阻塞式I/O
- 16.1 概述
- 16.2 非阻塞读和写:str_cli函数(修订版)
- 16.3 非阻塞connect
- 16.4 非阻塞connect:时间获取客户程序
- 16.5 非阻塞connect:Web客户程序
- 16.6 非阻塞accept
- 16.7 小结
- 习题
- 第17章 ioctl操作
- 17.1 概述
- 17.2 ioctl函数
- 17.3 套接字操作
- 17.4 文件操作
- 17.5 接口配置
- 17.6 get_ifi_info函数
- 17.7 接口操作
- 17.8 ARP高速缓存操作
- 17.9 路由表操作
- 17.10 小结
- 习题
- 第18章 路由套接字
- 18.1 概述
- 18.2 数据链路套接字地址结构
- 18.3 读和写
- 18.4 sysctl操作
- 18.5 get_ifi_info函数
- 18.6 接口名字和索引函数
- 18.7 小结
- 习题
- 第19章 密钥管理套接字
- 19.1 概述
- 19.2 读和写
- 19.3 倾泻安全关联数据库
- 19.4 创建静态安全关联
- 19.5 动态维护安全关联
- 19.6 小结
- 习题
- 第20章 广播
- 20.1 概述
- 20.2 广播地址
- 20.3 单播和广播的比较
- 20.4 使用广播的dg_cli函数
- 20.5 竞争状态
- 20.6 小结
- 习题
- 第21章 多播
- 21.1 概述
- 21.2 多播地址
- 21.3 局域网上多播和广播的比较
- 21.4 广域网上的多播
- 21.5 源特定多播
- 21.6 多播套接字选项
- 21.7 mcast_join和相关函数
- 21.8 使用多播的dg_cli函数
- 21.9 接收IP多播基础设施会话声明
- 21.10 发送和接收
- 21.11 SNTP:简单网络时间协议
- 21.12 小结
- 习题
- 第22章 高级UDP套接字编程
- 22.1 概述
- 22.2 接收标志、目的IP地址和接口索引
- 22.3 数据报截断
- 22.4 何时用UDP代替TCP
- 22.5 给UDP应用增加可靠性
- 22.6 捆绑接口地址
- 22.7 并发UDP服务器
- 22.8 IPv6分组信息
- 22.9 IPv6路径MTU控制
- 22.10 小结
- 习题
- 第23章 高级SCTP套接字编程
- 23.1 概述
- 23.2 自动关闭的一到多式服务器程序
- ……
- 第31章 流
- 附录
- 参考文献
- 索引