the sockets networking api - gbv
TRANSCRIPT
UNIX Network Programming
The Sockets Networking API Volume 1 • Third Edition
W. Richard Stevens Bill Fenner
Andrew M. Rudoff
AAddison-Wesley Boston • San Francisco • New York • Toronto • Montreal
London • Munich • Paris • Madrid Capetown • Sydney • Tokyo • Singapore • Mexico City
Contents
Foreword
Preface
XVII
xix
Part 1. Introduction and TCP/IP
Chapter 1. Introduction
1.1 Introduction 3 1.2 A Simple Daytime Client 6 1.3 Protocol Independence 10 1.4 Error Handling: Wrapper Functions 11 1.5 A Simple Daytime Server 13 1.6 Roadmap to Client/Server Examples in the Text 1.7 OSI Model 18 1.8 BSD Networking History 20 1.9 Test Networks and Hosts 22 1.10 Unix Standards 25 1.11 64-Bit Architectures 28 1.12 Summary 29
Chapter 2. The Transport Layer: TCP, UDP, and SCTP
2.1 Introduction 31 2.2 The Big Picture 32 2.3 User Datagram Protocol (UDP) 34
16
31
viii UNIX Network Programming Contents
2.4 Transmission Control Protocol (TCP) 35 2.5 Stream Control Transmission Protocol (SCTP) 36 2.6 TCP Connection Establishment and Termination 37 2.7 TIMEJA/AIT State 43 2.8 SCTP Association Establishment and Termination 44 2.9 Port Numbers 50 2.10 TCP Port Numbers and Concurrent Servers 52 2.11 Buffer Sizes and Limitations 55 2.12 Standard Internet Services 61 2.13 Protocol Usage by Common Internet Applications 62 2.14 Summary 63
Part 2. Elementary Sockets 65
Chapter 3. Sockets Introduction 67
3.1 Introduction 67 3.2 Socket Address Structures 67 3.3 Value-Result Arguments 74 3.4 Byte Ordering Functions 77 3.5 Byte Manipulation Functions 80 3.6 inet_aton, inet_addr , and i ne t_n toa Functions 82 3.7 ine t_pton and ine t_n top Functions 83 3.8 sock_ntop and Related Functions 86 3.9 readn, writen, and r e a d l i n e Functions 88 3.10 Summary 92
Chapter 4. Elementary TCP Sockets 95
4.1 Introduction 95 4.2 socket Function 95 4.3 connect Function 99 4.4 b i n d Function 101 4.5 l i s t e n Function 104 4.6 accept Function 109 4.7 f o r k and exec Functions 111 4.8 Concurrent Servers 114 4.9 c lose Function 117 4.10 getsockname and getpeername Functions 117 4.11 Summary 120
Chapter 5. TCP Client/Server Example 121
5.1 Introduction 121 5.2 TCP Echo Server: main Function 122 5.3 TCP Echo Server: s t r_echo Function 123 5.4 TCP Echo Client: main Function 124 5.5 TCP Echo Client: s t r _ c l i Function 125 5.6 Normal Startup 126 5.7 Normal Termination 128
UNIX Network Programming Contents ix
5.8 POSIX Signal Handling 129 5.9 Handling SIGCHLD Signals 132
5.10 wa i t and w a i t p i d Functions 135 5.11 Connection Abort betöre accept Returns 139 5.12 Termination of Server Process 141 5.13 S I G P I P E Signal 142 5.14 Crashing of Server Host 144 5.15 Crashing and Rebooting of Server Host 144 5.16 Shutdown of Server Host 145 5.17 Summary of TCP Example 146 5.18 Data Format 147 5.19 Summary 151
Chapter 6. I/O Multiplexing: The se lec t and p o l l Functions 153
6.1 Introduction 153 6.2 I/O Models 154 6.3 s e l e c t Function 160 6.4 s t r _ c l i Function (Revisited) 167 6.5 Batch Input and Buffering 169 6.6 shutdown Function 172 6.7 s t r _ c l i Function (Revisited Again) 173 6.8 TCP Echo Server (Revisited) 175 6.9 p s e l e c t Function 181 6.10 p o l l Function 182 6.11 TCP Echo Server (Revisited Again) 185 6.12 Summary 188
Chapter 7. Socket Options 191
7.1 Introduction 191 7.2 getsockopt and setsockopt Functions 192 7.3 Checking if an Option Is Supported and Obtaining the Default 194 7.4 Socket States 198 7.5 Generic Socket Options 198 7.6 IPv4 Socket Options 214 7.7 ICMPv6 Socket Option 216 7.8 IPv6 Socket Options 216 7.9 TCP Socket Options 219 7.10 SCTP Socket Options 222 7.11 f c n t l Function 233 7.12 Summary 236
Chapter 8. Elementary UDP Sockets 239
8.1 Introduction 239 8.2 recv f rom and sendto Functions 240 8.3 UDP Echo Server: main Function 241 8.4 UDP Echo Server: dg_echo Function 242 8.5 UDP Echo Client: main Function 244 8.6 UDP Echo Client: d g c l i Function 245
x UNIX Network Programming Contents
8.7 Lost Datagrams 245 8.8 Verifying Received Response 246 8.9 Server Not Running 248 8.10 Summary of UDP Example 250 8.11 connect Function with UDP 252 8.12 d g _ c l i Function (Revisited) 256 8.13 Lack of Flow Control with UDP 257 8.14 Determining Outgoing Interface with UDP 261 8.15 TCP and UDP Echo Server Using s e l e c t 262 8.16 Summary 264
Chapter 9. Elementary SCTP Sockets 267
9.1 Introduction 267 9.2 Interface Models 268 9.3 s c t p b i n d x Function 272 9.4 sctp_connectx Function 274 9.5 sc tp_getpaddrs Function 275 9.6 sc tp_freepaddrs Function 275 9.7 sc tp_ge t l add r s Function 275 9.8 s c tp_ f ree l addr s Function 276 9.9 sctp_sendmsg Function 276 9.10 sctp_recvmsg Function 277 9.11 sc tp_opt_info Function 278 9.12 sctp_peeloff Function 278 9.13 shutdown Function 278 9.14 Notifications 280 9.15 Summary 286
Chapter 10. SCTP Client/Server Example 287
10.1 Introduction 287 10.2 SCTP One-to-Many-Style Streaming Echo Server: main Function 288 10.3 SCTP One-to-Many-Style Streaming Echo Client: main Function 290 10.4 SCTP Streaming Echo Client: s t r c l i Function 292 10.5 Exploring Head-of-Line Blocking 293 10.6 Controlling the Number of Streams 299 10.7 Controlling Termination 300 10.8 Summary 301
Chapter 11. Name and Address Conversions 303
11.1 Introduction 303 11.2 Domain Name System (DNS) 303 11.3 gethostbyname Function 307 11.4 gethostbyaddr Function 310 11.5 getservbyname and ge t se rvbypor t Functions 311 11.6 ge taddr in fo Function 315 11.7 g a i _ s t r e r r o r Function 320 11.8 f reeaddr info Function 321 11.9 ge taddr in fo Function: IPv6 322
UNIX Network Programming Contents xi
g e t a d d r i n f o Function: Examples 324 11.10 11.11 host_serv Function 325 11.12 tcp_connect Function 326 11.13 t cp l i s t e n Function 330 11.14 u d p _ c l i e n t Function 334 11.15 udp_connect Function 337 11.16 u d p s e r v e r Function 338 11.17 getnameinfo Function 340 11.18 Re-entrant Functions 341 11.19 gethostbyname_r and gethostbyaddr_r 11.20 Obsolete IPv6 Address Lookup Functions 11.21 Other Networking Information 348 11.22 Summary 349
Functions 346
344
Part 3. Advanced Sockets 351
Chapter 12.
12.1 12.2 12.3 12.4 12.5 12.6
Chapter 13.
13.1 13.2 13.3 13.4 13.5 13.6 13.7
Chapter 14.
14.1 14.2 14.3 14.4 14.5 14.6 14.7 14.8 14.9 14.10
IPv4 and IPv6 Interoperability
Introduction 353 IPv4 Client, IPv6 Server 354 IPv6 Client, IPv4 Server 357 IPv6 Address-Testing Macros 360 Source Code Portability 361 Summary 362
Daemon Processes and the inetd Superserver
Introduction 363 sys logd Daemon 364 sys log Function 365 daemon_ini t Function 367 i n e t d Daemon 371 daemon_inetd Function 377 Summary 379
Advanced I/O Functions
Introduction 381 Socket Timeouts 381 recv and send Functions 387 readv and w r i t e v Functions 389 recvmsg and sendmsg Functions 390 Ancillary Data 395 How Much Data Is Queued? 398 Sockets and Standard I/O 399 Advanced Polling 402 Summary 408
353
363
381
xii UNIX Network Programming Contents
Chapter 15.
15.1 15.2 15.3 15.4 15.5 15.6 15.7 15.8 15.9
Chapter 16.
16.1 16.2 16.3 16.4 16.5 16.6 16.7
Chapter 17.
17.1 17.2 17.3 17.4 17.5 17.6 17.7 17.8 17.9 17.10
Chapter 18.
18.1 18.2 18.3 18.4 18.5 18.6 18.7
Chapter 19.
19.1 19.2 19.3 19.4 19.5 19.6
Unix Domain Protocols 411
Introduction 411 Unix Domain Socket Address Structure 412 socke tpa i r Function 414 Socket Functions 415 Unix Domain Stream Client/Server 416 Unix Domain Datagram Client/Server 418 Passing Descriptors 420 Receiving Sender Credentials 429 Summary 432
Nonblocking I/O 435
Introduction 435 Nonblocking Reads and Writes: s t r c l i Function (Revisited) 437 Nonblocking connect 448 Nonblocking connect: Daytime Client 449 Nonblocking connect: Web Client 452 Nonblocking accept 461 Summary 463
i o c t l Operations
Introduction 465 i o c t l Function 466 Socket Operations 466 File Operations 468 Interface Configuration 468 g e t _ i f i _ i n f o Function 469 Interface Operations 480 ARP Cache Operations 481 Routing Table Operations 483 Summary 484
Routing Sockets
Introduction 485 Datalink Socket Address Structure Reading and Writing 487 s y s c t l Operations 495 g e t _ i f i _ i n f o Function (Revisited) Interface Name and Index Functions Summary 508
465
485
486
500 504
Key Management Sockets
Introduction 511 Reading and Writing 512 Dumping the Security Association Database (SADB) Creating a Static Security Association (SA) 517 Dynamically Maintaining SAs 524 Summary 528
511
514
UNIX Network Programming Contents xiii
535
565 570
Chapter 20. Broadcasting
20.1 Introduction 529 20.2 Broadcast Addresses 531 20.3 Unicast versus Broadcast 532 20.4 d g c l i Function Using Broadcasting 20.5 Race Conditions 538 20.6 Summary 547
Chapter 21. Multicasting
21.1 Introduction 549 21.2 Multicast Addresses 549 21.3 Multicasting versus Broadcasting on a LAN 553 21.4 Multicasting on a WAN 556 21.5 Source-Specific Multicast 558 21.6 Multicast Socket Options 559 21.7 mcas t_ jo in and Related Functions 21.8 d g c l i Function Using Multicasting 21.9 Receiving IP Multicast Infrastructure Session Announcements 21.10 Sending and Receiving 575 21.11 Simple Network Time Protocol (SNTP) 579 21.12 Summary 584
Chapter 22. Advanced UDP Sockets
22.1 Introduction 587 22.2 Receiving Flags, Destination IP Address, and Interface Index 22.3 Datagram Truncation 594 22.4 When to Use UDP Instead of TCP 594 22.5 Adding Reliability to a UDP Application 597 22.6 Binding Interface Addresses 608 22.7 Concurrent UDP Servers 612 22.8 IPv6 Packet Information 615 22.9 IPv6 Path MTU Control 618 22.10 Summary 620
Chapter 23. Advanced SCTP Sockets
23.1 Introduction 621 23.2 An Autoclosing One-to-Many-Style Server 621 23.3 Partial Delivery 622 23.4 Notifications 625 23.5 Unordered Data 629 23.6 Binding a Subset of Addresses 630 23.7 Determining Peer and Local Address Information 23.8 Finding an Association ID Given an IP Address 23.9 Heartbeating and Address Failure 636 23.10 Peeling Off an Association 637 23.11 Controlling Timing 639 23.12 When to Use SCTP Instead of TCP 641 23.13 Summary 643
529
549
571
587
588
621
631 635
xiv UNIX Network Programming Contents
Chapter 24. Out-of-Band Data
24.1 Introduction 645 24.2 TCP Out-of-Band Data 645 24.3 sockatmark Function 654 24.4 TCP Out-of-Band Data Recap 24.5 Summary 662
645
661
Chapter 25.
25.1 25.2 25.3 25.4
Signal-Driven I/O
Introduction 663 Signal-Driven I/O for Sockets UDP Echo Server Using S I G I O Summary 672
663
664 666
Chapter 26. Threads
26.1 Introduction 675 26.2 Basic Thread Functions: Creation and Termination 676 26.3 s t r c l i Function Using Threads 679 26.4 TCP Echo Server Using Threads 681 26.5 Thread-Specific Data 686 26.6 Web Client and Simultaneous Connections (Continued) 694 26.7 Mutexes: Mutual Exclusion 697 26.8 Condition Variables 701 26.9 Web Client and Simultaneous Connections (Continued) 705 26.10 Summary 707
675
Chapter 27. IP Options
27.1 Introduction 709 27.2 IPv4 Options 709 27.3 IPv4 Source Route Options 711 27.4 IPv6 Extension Headers 719 27.5 IPv6 Hop-by-Hop Options and Destination Options 27.6 IPv6 Routing Header 725 27.7 IPv6 Sticky Options 731 27.8 Historical IPv6 Advanced API 732 27.9 Summary 733
709
719
Chapter 28. Raw Sockets
28.1 Introduction 735 28.2 Raw Socket Creation 736 28.3 Raw Socket Output 737 28.4 Raw Socket Input 739 28.5 ping Program 741 28.6 t r a c e r o u t e Program 755 28.7 An ICMP Message Daemon 769 28.8 Summary 786
735
UNIX Network Programming Contents xv
Chapter 29. Datalink Access
29.1 Introduction 787 29.2 BSD Packet Filter (BPF) 788 29.3 Datalink Provider Interface (DLPI) 790 29.4 Linux: SOCK_PACKET and PF_PACKET 791 29.5 l i bpcap : Packet Capture Library 792 29.6 l i b n e t : Packet Creation and Injection Library 29.7 Examining the UDP Checksum Field 793 29.8 Summary 815
Chapter 30. Client/Server Design Alternatives
787
793
817
30.1 30.2 30.3 30.4 30.5 30.6 30.7 30.8 30.9 30.10 30.11 30.12 30.13
Introduction 817 TCP Client Alternatives 819 TCP Test Client 820 TCP Iterative Server 821 TCP Concurrent Server, One Child per Client 822 TCP Preforked Server, No Locking Around accept 826 TCP Preforked Server, File Locking Around accept 832 TCP Preforked Server, Thread Locking Around accept 835 TCP Preforked Server, Descriptor Passing 836 TCP Concurrent Server, One Thread per Client 842 TCP Prethreaded Server, per-Thread accept 844 TCP Prethreaded Server, Main Thread accept 846 Summary 849
Chapter 31 . STREAMS
31.1 Introduction 851 31.2 Overview 851 31.3 getmsg and putmsg Functions 31.4 getpmsg and putpmsg Functions 31.5 i o c t l Function 857 31.6 Transport Provider Interface (TPI) 31.7 Summary 868
851
856 857
858
Appendix A. IPv4, IPv6, ICMPv4, and ICMPv6
A.1 Introduction 869 A.2 IPv4 Header 869 A.3 IPv6 Header 871 A.4 IPv4 Addresses 874 A.5 IPv6 Addresses 877 A.6 Internet Control Message Protocols (ICMPv4 and ICMPv6)
Appendix B. Virtual Networks B.1 Introduction 885 B.2 The MBone 885 B.3 The 6bone 887 B.4 IPv6 Transition: 6to4 889
869
882
885
xvi UNIX Network Programming Contents
Appendix C.
C.1 C.2 C.3 C.4 C.5 C.6 C.7
Appendix D,
D.1 D.2 D.3
Debugging Techniques
System Call Tracing 891 Standard Internet Services 893 sock Program 893 Small Test Programs 896 tcpdump Program 896 n e t s t a t Program 896 l s o f Program 897
Miscellaneous Source Code
891
899
unp.h Header 899 c o n f i g . h Header 904 Standard Error Functions 910
Appendix E. Solutions to Selected Exercises 913
Bibliography
Index
947
955