《UNIX网络编程 第2版 第1卷 套接口API和X/Open传输接口API》PDF下载

  • 购买积分:23 如何计算积分?
  • 作  者:(美)(W.R.史蒂文斯)W.Richard Stevens著;施振川等译
  • 出 版 社:北京:清华大学出版社
  • 出版年份:1999
  • ISBN:7302035482
  • 页数:857 页
图书介绍:内容提要本书全面深入地讲述了套接口API网络编程的既成事实标准,对X/Open传输接口API也作了广泛的介绍。本书从对套接口API的综合讨论开始,论述了基本编程内容后,即转入高级套接口编程的相关主题,包括IPv4与IPv6的互操作性、UNIX域协议、非阻塞I/O、路由套接口、广播、多播、线程、原始套接口、数据链路访问等,对于客户—服务器程序的各种设计方法也作了完整的探讨。在叙述X/Open传输接口API时,还对流这种设备驱动机制作了深入分析。在附录中又给出了IPv6、ICMPv6、虚拟网络等新内容。本书内容详尽且具权威性,几乎每章都提供精选的习题,是计算机和网络专业高年级本科生和研究生的首选教材。本书也可作为网络研究和开发人员的自学教材和参考书。

前言页 1

前言 1

第1部分 简介和TCP/IP 1

第1章 简介 1

1.1 概述 1

1.2 一个简单的时间/日期客户程序 4

1.3 协议无关性 8

1.4 错误处理:包裹函数 9

1.5 一个简单的时间/日期服务器程序 10

1.6 书中客户-服务器程序例子索引表 13

1.7 OSI模型 15

1.9 测试用网络及主机 16

1.8 BSD网络支持历史 16

1.10 Unix标准 20

1.11 64位体系结构 22

1.12 小结 23

1.13 习题 24

第2章 传输层:TCP和UDP 25

2.1 概述 25

2.2 总图 25

2.3 UDP:用户数据报协议 27

2.4 TCP:传输控制协议 28

2.5 TCP连接的建立和终止 29

2.6 TIME_WAIT状态 35

2.7 端口号 36

2.8 TCP端口号与并发服务器 38

2.9 缓冲区大小及限制 39

2.10 标准因特网服务 44

2.11 常见因特网应用程序的协议使用 45

2.12 小结 46

2.13 习题 46

第2部分 基本套接口编程 47

第3章 套接口编程简介 47

3.1 概述 47

3.2 套接口地址结构 47

3.3 值-结果参数 52

3.4 字节排序函数 54

3.5 字节操纵函数 57

3.6 inet_aton、inet_addr和inet_ntoa函数 58

3.7 inet_pton和inet_ntop函数 59

3.8 sock_ntop和相关函数 62

3.9 readn、writen和readline函数 64

3.10 isfdtype函数 67

3.11 小结 68

3.12 习题 69

第4章 基本TCP套接口编程 70

4.1 概述 70

4.2 socket函数 70

4.3 connect函数 73

4.4 bind函数 75

4.5 listen函数 77

4.6 accept函数 83

4.7 fork和exec函数 85

4.8 并发服务器 87

4.9 close函数 89

4.10 getsockname和getpeername函数 90

4.11 小结 92

4.12 习题 92

第5章 TCP客户-服务器程序例子 93

5.1 概述 93

5.2 TCP回射服务器程序:main函数 94

5.3 TCP回射服务器程序:str_echo函数 95

5.4 TCP回射客户程序:main函数 95

5.5 TCP回射客户程序:str_cli函数 96

5.6 正常启动 97

5.7 正常终止 98

5.8 Posix信号处理 99

5.9 处理SIGCHLD信号 102

5.10 wait和waitpid函数 105

5.11 accept返回前连接夭折 108

5.12 服务器进程终止 110

5.13 SIGPIPE信号 111

5.14 服务器主机崩溃 113

5.15 服务器主机崩溃后重启 113

5.16 服务器主机关机 114

5.17 TCP程序例子小结 114

5.18 数据格式 116

5.19 小结 118

5.20 习题 119

第6章 I/O复用:select和poll函数 121

6.1 概述 121

6.2 I/O模型 121

6.3 select函数 126

6.4 str_cli函数(修订版) 131

6.5 批量输入 133

6.6 shutdown函数 135

6.7 str_cli函数(再修订版) 137

6.8 TCP回射服务器程序(修订版) 138

6.9 pselect函数 143

6.10 poll函数 144

6.11 TCP回射服务器程序(再修订版) 146

6.12 小结 149

6.13 习题 149

第7章 套接口选项 151

7.1 概述 151

7.2 getsockopt和setsockopt函数 151

7.3 检查选项是否受支持并获取缺省值 153

7.4 套接口状态 156

7.5 基本套接口选项 156

7.6 IPv4套接口选项 169

7.7 ICMPv6套接口选项 170

7.8 IPv6套接口选项 171

7.9 TCP套接口选项 172

7.10 fcntl函数 175

7.11 小结 178

7.12 习题 178

第8章 基本UDP套接口编程 180

8.1 概述 180

8.2 recvfrom和sendto函数 180

8.4 UDP回射服务器程序:dg_echo函数 182

8.3 UDP回射服务器程序:main函数 182

8.5 UDP回射客户程序:main函数 184

8.6 UDP回射客户程序:dg_cli函数 185

8.7 数据报的丢失 185

8.8 验证接收到的响应 186

8.9 服务器进程未运行 188

8.10 UDP程序例子小结 189

8.11 UDP的connect函数 191

8.12 dg-cli函数(修订版) 194

8.13 UDP缺乏流量控制 195

8.14 UDP中外出接口的确定 199

8.15 使用select函数的TCP和UDP回射服务器程序 200

8.16 小结 202

8.17 习题 202

9.2域名系统 204

第9章 基本名字与地址转换 204

9.1 概述 204

9.3 gethostbyname函数 207

9.4 RES_USE_ INET6解析器选项 211

9.5 gethostbyname2函数与IPv6支持 212

9.6 gethostbyaddr函数 214

9.7 uname函数 215

9.8 gethostname函数 216

9.9 getservbyname和getservbyport函数 216

9.10 其他网络相关信息 219

9.11 小结 220

9.12 习题 221

10.2 IPv4客户与IPv6服务器 222

10.1 概述 222

第3部分 高级套接口编程 222

第10章 IPv4和IPv6的互操作性 222

10.3 IPv6客户与IPv4服务器 226

10.4 IPv6地址测试宏 227

10.5 IPV6-ADDRFORM套接口选项 228

10.6 源代码可移植性 230

10.7 小结 230

10.8 习题 231

第11章 高级名字与地址转换 232

11.1 概述 232

11.2 getaddrinfo函数 232

11.3 gai_strerror函数 236

11.4 freeaddrinfo函数 237

11.5 getaddrinfo函数:IPv6和UNIX域 238

11.6 getaddrinfo函数:例子 240

11.7 host_serv函数 241

11.8 tcp_connect函数 242

11.9 tcp_listen函数 245

11.10 udp_client函数 250

11.11 udp_connect函数 252

11.12 udp-server函数 253

11.13 getnameinfo函数 255

11.14 可重入函数 256

11.15 gethostbyname_r和gethostbyaddr_r函数 259

11.16 getaddrinfo和getnameinfo函数的实现 261

11.17 小结 281

11.18 习题 282

第12章 守护进程和inetd超级服务器 283

12.1 概述 283

12.2 syslogd守护进程 284

12.3 syslog函数 284

12.4 daemon_init函数 287

12.5 inetd守护进程 290

12.6 daemon_inetd函数 294

12.7 小结 296

12.8 习题 297

第13章 高级I/O函数 298

13.1 概述 298

13.2 套接口超时 298

13.3 recv和send函数 302

13.4 readv和writev函数 304

13.5 recvmsg和sendmsg函数 305

13.6 辅助数据 309

13.7 排队的数据量 312

13.8 套接口与标准I/O 312

13.9 T/TCP:事务TCP 315

13.10 小结 317

13.11 习题 317

第14章 Unix域协议 318

14.1 概述 318

14.2 Unix域套接口地址结构 318

14.3 socketpair函数 321

14.4 套接口函数 321

14.5 Unix域字节流客户-服务器程序 322

14.6 Unix域数据报客户-服务器程序 323

14.7 描述字传递 325

14.8 接收发送者的凭证 332

14.9 小结 336

14.10 习题 336

第15章 非阻塞I/O 338

15.1 概述 338

15.2 非阻塞读和写:str_cli函数(修订版) 339

15.3 非阻塞connect 348

15.4 非阻塞connect:日期/时间客户程序 349

15.5 非阻塞connect:Web客户程序 352

15.6 非阻塞accept 360

15.7 小结 361

15.8 习题 362

第16章 ioctl操作 363

16.1 概述 363

16.2 ioctl函数 363

16.3 套接口操作 364

16.4 文件操作 365

16.5 接口配置 366

16.6 get_ifi_info函数 367

16.7 接口操作 375

16.8 ARP高速缓存操作 376

16.9 路由表操作 378

16.10 小结 378

16.11 习题 379

17.2 数据链路套接口地址结构 380

第17章 路由套接口 380

17.1 概述 380

17.3 读和写 381

17.4 sysctl操作 388

17.5 get_ifi_info函数 392

17.6 接口名和索引函数 395

17.7 小结 399

17.8 习题 400

第18章 广播 401

18.1 概述 401

18.2 广播地址 402

18.3 单播和广播的比较 403

18.4 使用广播的dg_cli函数 406

18.5 竞争状态 409

18.6 小结 416

18.7 习题 416

第19章 多播 417

19.1 概述 417

19.2 多播地址 417

19.3 局域网上多播和广播的比较 420

19.4 广域网上的多播 422

19.5 多播套接口选项 424

19.6 mcast_join和相关函数 427

19.7 使用多播的dg-cli函数 430

19.8 接收MBone会话声明 431

19.9 发送和接收 434

19.10 SNTP简单网络时间协议 436

19.11 SNTP(续) 440

19.12 小结 451

19.13 习题 452

第20章 高级UDP套接口编程 454

20.1 概述 454

20.2 接收标志、目的IP地址和接口索引 454

20.3 数据报截断 461

20.4 何时使用UDP而不是TCP 461

20.5 给UDP应用程序增加可靠性 463

20.6 捆绑接口地址 472

20.7 并发UDP服务器 476

20.8 IPv6分组信息 478

20.9 小结 480

20.10 习题 481

第21章 带外数据 482

21.1 概述 482

21.2 TCP带外数据 482

21.3 sockatmark函数 488

21.4 TCP带外数据小结 494

21.5 客户-服务器心博函数 495

21.6 小结 499

21.7 习题 499

第22章 信号驱动I/O 501

22.1 概述 501

22.2 套接口上的信号驱动I/O 501

22.3 使用SIGIO的UDP回射服务器程序 503

22.4 小结 508

22.5 习题 509

23.1 概述 510

第23章 线程 510

23.2 基本线程函数:创建和终止 511

23.3 使用线程的str_cli函数 513

23.4 使用线程的TCP回射服务器程序 515

23.5 线程特定数据 519

23.6 Web客户与同时连接 526

23.7 互斥锁 529

23.8 条件变量 532

23.9 Web客户与同时连接(续) 535

23.10 小结 537

23.11 习题 537

24.2 IPv4选项 539

第24章 IP选项 539

24.1 概述 539

24.3 IP源路径选项 540

24.4 IPv6扩展头部 547

24.5 IPv6步跳选项和目的选项 548

24.6 IPv6路由头部 551

24.7 IPv6粘附选项 554

24.8 小结 555

24.9 习题 555

第25章 原始套接口 557

25.1 概述 557

25.2 原始套接口创建 557

25.3 原始套接口输出 558

25.4 原始套接口输入 559

25.5 Ping程序 561

25.6 Traceroute程序 572

25.7 一个ICMP消息守护进程 583

25.8 小结 597

25.9 习题 597

第26章 数据链路访问 599

26.1 概述 599

26.2 BPF:BSD分组过滤器 599

26.3 DLPI:数据链路提供者接口 601

26.4 Linux:SOCK_PACKET 602

26.5 libpcap:分组捕获函数库 603

26.6 检查UDP的校验和字段 603

26.8 习题 619

26.7 小结 619

第27章 客户-服务器程序其他设计方法 620

27.1 概述 620

27.2 TCP客户程序其他设计方法 622

27.3 TCP测试用客户程序 623

27.4 TCP迭代服务器程序 624

27.5 TCP并发服务器程序,每个客户一个子进程 624

27.6 TCP预先派生子进程服务器程序,accept无上锁保护 627

27.7 TCP预先派生子进程服务器程序,accept使用文件锁保护 633

27.8 TCP预先派生子进程服务器程序,accept使用线程互斥锁保护 636

27.9 TCP预先派生子进程服务器程序,传递描述字 637

27.10 TCP并发服务器程序,每个客户一个线程 642

27.11 TCP预先创建线程服务器程序,每个线程各自accept 643

27.12 TCP预先创建线程服务器程序,主线程统一accept 645

27.13 小结 648

27.14 习题 649

第4部分 XTI:X/Open传输接口编程 650

第28章 XTI:TCP客户程序 650

28.1 概述 650

28.2 t_open函数 651

28.3 t_error和t_strerror函数 654

28.4 netbuf结构和XTI结构 655

28.5 t_bind函数 656

28.6 t_connect函数 658

28.7 t_rcv和t_snd函数 658

28.8 t_look函数 660

28.9 t_sndrel和t_rcvrel函数 661

28.10 t_snddis和t_rcvdis函数 662

28.11 XTI TCP时间/日期客户程序 663

28.12 xti_rdwr函数 666

28.13 小结 667

28.14 习题 667

第29章 XTI:名字与地址函数 668

29.1 概述 668

29.2 /etc/netconfig文件与netconfig函数 668

29.3 NETPATH环境变量与netpath函数 670

29.4 netdir函数 671

29.5 t_alloc和t_free函数 673

29.6 t_getprotaddr函数 675

29.7 xti_ntop函数 675

29.8 tcp_connect函数 676

29.10 习题 680

29.9 小结 680

30.1 概述 681

第30章 XTI:TCP服务器程序 681

30.2 t_listen函数 682

30.3 tcp_listen函数 683

30.4 t_accept函数 685

30.5 xti_accept函数 686

30.6 简单的时间/日期服务器程序 687

30.7 多个待处理连接 689

30.8 xti_accept函数(修订版) 691

30.9 小结 698

30.10 习题 698

31.2 t_rcvudata和t_sndudata函数 700

31.3 udp_client函数 700

31.1 概述 700

第31章 XTI:UDP客户和服务器程序 700

31.4 t_rcvuderr函数:异步错误 704

31.5 udp_server函数 706

31.6 分片读取数据报 708

31.7 小结 710

第32章 XTI选项 711

32.1 概述 711

32.2 t_opthdr结构 713

32.3 XTI选项 714

32.4 t_optmgmt函数 717

32.5 检查选项是否受支持并获取缺省值 718

32.6 获取和设置XTI选项 721

32.7 小结 724

33.1 概述 725

33.2 概貌 725

第33章 流 725

33.3 getmsg和putmsg函数 729

33.4 getpmsg和putpmsg函数 730

33.5 ioctl函数 731

33.6 TPI:传输提供者接口 731

33.7 小结 740

33.8习题 740

34.2 非阻塞I/O 741

34.3 t_rcvconnect函数 741

34.1 概述 741

第34章 XTI:其他函数 741

34.4 t_getinfo函数 742

34.5 t_getstate函数 742

34.6 t_sync函数 743

34.7 t_unbind函数 745

34.8 t_rcvv和t_rcvvudata函数 745

34.9 t_sndv和t_sndvudata函数 746

34.10 t_rcvreldata和t_sndreldata函数 746

34.11 信号驱动I/O 747

34.12 带外数据 748

34.13 回馈传输提供者 752

34.14 小结 753

A.2 IPv4头部 754

A.1 概述 754

附录A IPv4、IPv6、ICMPv4和ICMPv6 754

第5部分 附录 754

A.3 IPv6头部 755

A.4 IPv4地址 758

A.5 IPv6地址 762

A.6 ICMPv4和ICMPv6:网际控制消息协议 766

附录B 虚拟网络 769

B.1 概述 769

B.2 MBone 769

B.3 6bone 771

附录C 调试技术 773

C.1 系统调用跟踪 773

C.2 标准因特网服务 777

C.3 sock程序 778

C.4 小测试程序 780

C.5 tcpdump程序 782

C.6 netstat程序 782

C.7 lsof程序 783

附录D 杂凑的源代码 784

D.1 unp.h头文件 784

D.2 config.h头文件 787

D.3 unpxti.h头文件 789

D.4 标准错误处理函数 791

附录E 部分习题解答 794

附录F 参考文献 828

附录G 函数和宏定义索引表 837

附录H 结构定义索引表 840

附录I 中英文对照词汇表 842