资源名称:UNIX网络编程卷1:套接字联网API(第3版)

内容简介:

这是一部传世之作!顶级网络编程专家Bill Fenner和Andrew M. Rudoff应邀执笔,对W. Richard Stevens的经典作品进行修订。书中吸纳了近几年网络技术的发展,增添了IPv6、SCTP协议和密钥管理套接字等内容,深入讨论了最新的关键标准、实现和技术。

书中的所有示例都是在UNIX系统上测试通过的真实的、可运行的代码,继承了Stevens一直强调的理念:“学习网络编程的最好方法就是下载这些程序,对其进行修改和改进。只有这样实际编写代码才能深入理解有关概念和方法。”读者可以从图灵网站(www.turingbook.com)本书网页免费注册下载这些示例的源代码。

本书为UNIX网络编程提供全面的指导,是网络研究和开发人员公认的权威参考书,无论网络编程的初学者还是网络专家都会大受裨益。

作者简介:

W. Richard Stevens(1951—1999) 国际知名的UNIX和网络专家,备受赞誉的技术作家。生前著有《TCP/IP详解》(三卷)、《UNIX环境高级编程》和《UNIX网络编程》(两卷),均为不朽的经典著作。

Bill Fenner AT&T实验室的主要技术人员,专攻IP多播、网络管理和测量,他是IETF路由的领域主管之一,负责审批作为RFC出版的所有路由相关文档。

Andrew M. Rudoff Sun公司的资深软件工程师,专攻网络、操作系统内核、文件系统和高可用性软件体系结构。

资源目录:

第一部分 简介和tcp/ip

第1章 简介2

1.1 概述2

1.2 一个简单的时间获取客户程序5

1.3 协议无关性9

1.4 错误处理:包裹函数10

1.5 一个简单的时间获取服务器程序12

1.6 本书中客户/服务器程序示例索引表14

1.7 osi模型16

1.8 bsd网络支持历史17

1.9 测试用网络及主机19

1.10 unix标准22

1.11 64位体系结构24

1.12 小结25

习题25

第2章 传输层:tcp、udp和sctp27

2.1 概述27

2.2 总图27

2.3 用户数据报协议(udp)29

2.4 传输控制协议(tcp)30

.2.5 流控制传输协议(sctp)31

2.6 tcp连接的建立和终止31

2.7 time_wait状态37

2.8 sctp关联的建立和终止38

2.9 端口号42

2.10 tcp端口号与并发服务器43

2.11 缓冲区大小及限制45

2.12 标准因特网服务50

2.13 常见因特网应用的协议使用51

2.14 小结52

习题53

第二部分 基本套接字编程

第3章 套接字编程简介56

3.1 概述56

3.2 套接字地址结构56

3.3 值—结果参数61

3.4 字节排序函数63

3.5 字节操纵函数66

3.6 inet_aton、inet_addr和inet_ntoa函数67

3.7 inet_pton和inet_ntop函数68

3.8 sock_ntop和相关函数70

3.9 readn、writen和readline函数72

3.10 小结76

习题76

第4章 基本tcp套接字编程77

4.1 概述77

4.2 socket函数77

4.3 connect函数80

4.4 bind函数81

4.5 listen函数84

4.6 accept函数88

4.7 fork和exec函数90

4.8 并发服务器91

4.9 close函数93

4.10 getsockname和getpeername函数94

4.11 小结96

习题96

第5章 tcp客户/服务器程序示例97

5.1 概述97

5.2 tcp回射服务器程序:main函数97

5.3 tcp回射服务器程序:str_echo函数98

5.4 tcp回射客户程序:main函数99

5.5 tcp回射客户程序:str_cli函数100

5.6 正常启动101

5.7 正常终止102

5.8 posix信号处理103

5.9 处理sigchld信号106

5.10 wait和waitpid函数108

5.11 accept返回前连接中止111

5.12 服务器进程终止112

5.13 sigpipe信号113

5.14 服务器主机崩溃114

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

5.16 服务器主机关机116

5.17 tcp程序例子小结116

5.18 数据格式117

5.19 小结120

习题120

第6章 i/o复用:select和poll函数122

6.1 概述122

6.2 i/o模型122

6.3 select函数127

6.4 str_cli函数(修订版)132

6.5 批量输入133

6.6 shutdown函数136

6.7 str_cli函数(再修订版)137

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

6.9 pselect函数142

6.10 poll函数144

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

6.12 小结148

习题149

第7章 套接字选项150

7.1 概述150

7.2 getsockopt和setsockopt函数150

7.3 检查选项是否受支持并获取默认值152

7.4 套接字状态156

7.5 通用套接字选项156

7.6 ipv4套接字选项168

7.7 icmpv6套接字选项169

7.8 ipv6套接字选项169

7.9 tcp套接字选项171

7.10 sctp套接字选项173

7.11 fcntl函数182

7.12 小结184

习题184

第8章 基本udp套接字编程186

8.1 概述186

8.2 recvfrom和sendto函数187

8.3 udp回射服务器程序:main函数187

8.4 udp回射服务器程序:dg_echo函数188

8.5 udp回射客户程序:main函数190

8.6 udp回射客户程序:dg_cli函数190

8.7 数据报的丢失191

8.8 验证接收到的响应191

8.9 服务器进程未运行193

8.10 udp程序例子小结194

8.11 udp的connect函数196

8.12 dg_cli函数(修订版)199

8.13 udp缺乏流量控制200

8.14 udp中的外出接口的确定203

8.15 使用select函数的tcp和udp回射服务器程序204

8.16 小结206

习题207

第9章 基本sctp套接字编程208

9.1 概述208

9.2 接口模型208

9.3 sctp_bindx函数212

9.4 sctp_connectx函数213

9.5 sctp_getpaddrs函数213

9.6 sctp_freepaddrs函数213

9.7 sctp_getladdrs函数214

9.8 sctp_freeladdrs函数214

9.9 sctp_sendmsg函数214

9.10 sctp_recvmsg函数215

9.11 sctp_opt_info函数215

9.12 sctp_peeloff函数216

9.13 shutdown函数216

9.14 通知217

9.15 小结221

习题222

第10章 sctp客户/服务器程序例子223

10.1 概述223

10.2 sctp一到多式流分回射服务器程序:main函数223

10.3 sctp一到多式流分回射客户程序:main函数225

10.4 sctp流分回射客户程序:sctpstr_cli函数226

10.5 探究头端阻塞228

10.6 控制流的数目233

10.7 控制终结233

10.8 小结234

习题235

第11章 名字与地址转换236

11.1 概述236

11.2 域名系统236

11.3 gethostbyname函数239

11.4 gethostbyaddr函数242

11.5 getservbyname和getservbyport函数242

11.6 getaddrinfo函数245

11.7 gai_strerror函数250

11.8 freeaddrinfo函数251

11.9 getaddrinfo函数:ipv6251

11.10 getaddrinfo函数:例子253

11.11 host_serv函数254

11.12 tcp_connect函数254

11.13 tcp_listen函数257

11.14 udp_client函数261

11.15 udp_connect函数263

11.16 udp_server函数264

11.17 getnameinfo函数266

11.18 可重入函数267

11.19 gethostbyname_r和gethostbyaddr_r函数270

11.20 作废的ipv6地址解析函数271

11.21 其他网络相关信息272

11.22 小结273

习题274

第三部分 高级套接字编程

第12章 ipv4与ipv6的互操作性278

12.1 概述278

12.2 ipv4客户与ipv6服务器278

12.3 ipv6客户与ipv4服务器281

12.4 ipv6地址测试宏283

12.5 源代码可移植性284

12.6 小结284

习题285

第13章 守护进程和inetd超级服务器286

13.1 概述286

13.2 syslogd守护进程286

13.3 syslog函数287

13.4 daemon_init函数289

13.5 inetd守护进程293

13.6 daemon_inetd函数297

13.7 小结299

习题299

第14章 高级i/o函数300

14.1 概述300

14.2 套接字超时300

14.3 recv和send函数305

14.4 readv和writev函数306

14.5 recvmsg和sendmsg函数307

14.6 辅助数据310

14.7 排队的数据量313

14.8 套接字和标准i/o313

14.9 高级轮询技术316

14.10 t/tcp:事务目的tcp320

14.11 小结322

习题323

第15章 unix域协议324

15.1 概述324

15.2 unix域套接字地址结构324

15.3 socketpair函数326

15.4 套接字函数327

15.5 unix域字节流客户/服务器程序327

15.6 unix域数据报客户/服务器程序329

15.7 描述符传递330

15.8 接收发送者的凭证337

15.9 小结340

习题340

第16章 非阻塞式i/o341

16.1 概述341

16.2 非阻塞读和写:str_cli函数(修订版)342

16.3 非阻塞connect351

16.4 非阻塞connect:时间获取客户程序352

16.5 非阻塞connect:web客户程序354

16.6 非阻塞accept362

16.7 小结363

习题363

第17章 ioctl操作365

17.1 概述365

17.2 ioctl函数365

17.3 套接字操作366

17.4 文件操作367

17.5 接口配置367

17.6 get_ifi_info函数369

17.7 接口操作378

17.8 arp高速缓存操作378

17.9 路由表操作380

17.10 小结381

习题381

第18章 路由套接字382

18.1 概述382

18.2 数据链路套接字地址结构382

18.3 读和写383

18.4 sysctl操作390

18.5 get_ifi_info函数394

18.6 接口名字和索引函数397

18.7 小结401

习题401

第19章 密钥管理套接字402

19.1 概述402

19.2 读和写403

19.3 倾泻安全关联数据库404

19.4 创建静态安全关联407

19.5 动态维护安全关联412

19.6 小结415

习题416

第20章 广播417

20.1 概述417

20.2 广播地址418

20.3 单播和广播的比较419

20.4 使用广播的dg_cli函数422

20.5 竞争状态424

20.6 小结431

习题432

第21章 多播433

21.1 概述433

21.2 多播地址433

21.3 局域网上多播和广播的比较436

21.4 广域网上的多播438

21.5 源特定多播440

21.6 多播套接字选项441

21.7 mcast_join和相关函数445

21.8 使用多播的dg_cli函数450

21.9 接收ip多播基础设施会话声明451

21.10 发送和接收454

21.11 sntp:简单网络时间协议457

21.12 小结461

习题461

第22章 高级udp套接字编程462

22.1 概述462

22.2 接收标志、目的ip地址和接口索引462

22.3 数据报截断467

22.4 何时用udp代替tcp467

22.5 给udp应用增加可靠性469

22.6 捆绑接口地址478

22.7 并发udp服务器482

22.8 ipv6分组信息483

22.9 ipv6路径mtu控制486

22.10 小结487

习题488

第23章 高级sctp套接字编程489

23.1 概述489

23.2 自动关闭的一到多式服务器程序489

23.3 部分递送490

23.4 通知492

23.5 无序的数据495

23.6 捆绑地址子集496

23.7 确定对端和本端地址信息497

23.8 给定ip地址找出关联id500

23.9 心搏和地址不可达501

23.10 关联剥离502

23.11 定时控制503

23.12 何时改用sctp代替tcp505

23.13 小结506

习题506

第24章 带外数据507

24.1 概述507

24.2 tcp带外数据507

24.3 sockatmark函数513

24.4 tcp带外数据小结519

24.5 客户/服务器心搏函数520

24.6 小结524

习题524

第25章 信号驱动式i/o525

25.1 概述525

25.2 套接字的信号驱动式i/o525

25.3 使用sigio的udp回射服务器程序527

25.4 小结532

习题533

第26章 线程534

26.1 概述534

26.2 基本线程函数:创建和终止535

26.3 使用线程的str_cli函数537

26.4 使用线程的tcp回射服务器程序538

26.5 线程特定数据542

26.6 web客户与同时连接549

26.7 互斥锁552

26.8 条件变量555

26.9 web客户与同时连接(续)558

26.10 小结560

习题560

第27章 ip选项561

27.1 概述561

27.2 ipv4选项561

27.3 ipv4源路径选项562

27.4 ipv6扩展首部569

27.5 ipv6步跳选项和目的地选项569

27.6 ipv6路由首部573

27.7 ipv6粘附选项577

27.8 历史性ipv6高级api578

27.9 小结579

习题579

第28章 原始套接字580

28.1 概述580

28.2 原始套接字创建580

28.3 原始套接字输出581

28.4 原始套接字输入582

28.5 ping程序584

28.6 traceroute程序596

28.7 一个icmp消息守护程序608

28.8 小结622

习题622

第29章 数据链路访问623

29.1 概述623

29.2 bpf:bsd分组过滤器623

29.3 dlpi:数据链路提供者接口625

29.4 linux:sock_packet和

pf_packet626

29.5 libpcap:分组捕获函数库627

29.6 libnet:分组构造与输出函数库627

29.7 检查udp的校验和字段628

29.8 小结645

习题645

第30章 客户/服务器程序设计范式646

30.1 概述646

30.2 tcp客户程序设计范式648

30.3 tcp测试用客户程序649

30.4 tcp迭代服务器程序650

30.5 tcp并发服务器程序,每个客户一个子进程650

30.6 tcp预先派生子进程服务器程序,accept无上锁保护653

30.7 tcp预先派生子进程服务器程序,accept使用文件上锁保护659

30.8 tcp预先派生子进程服务器程序,accept使用线程上锁保护662

30.9 tcp预先派生子进程服务器程序,传递描述符663

30.10 tcp并发服务器程序,每个客户一个线程667

30.11 tcp预先创建线程服务器程序,每个线程各自accept669

30.12 tcp预先创建线程服务器程序,主线程统一accept671

30.13 小结673

习题674

第31章 流675

31.1 概述675

31.2 概貌675

31.3 getmsg和putmsg函数678

31.4 getpmsg和putpmsg函数679

31.5 ioctl函数680

31.6 tpi:传输提供者接口680

31.7 小结689

习题689

附录a ipv4、ipv6、icmpv4和

icmpv6690

附录b 虚拟网络704

附录c 调试技术708

附录d 杂凑的源代码714

附录e 精选习题答案726

参考文献756

索引763

资源截图:

UNIX网络编程卷1:套接字联网API(第3版)