the sockets networking api - gbv

11
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

Upload: others

Post on 03-Nov-2021

4 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: The Sockets Networking API - GBV

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

Page 2: The Sockets Networking API - GBV

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

Page 3: The Sockets Networking API - GBV

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

Page 4: The Sockets Networking API - GBV

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

Page 5: The Sockets Networking API - GBV

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

Page 6: The Sockets Networking API - GBV

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

Page 7: The Sockets Networking API - GBV

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

Page 8: The Sockets Networking API - GBV

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

Page 9: The Sockets Networking API - GBV

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

Page 10: The Sockets Networking API - GBV

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

Page 11: The Sockets Networking API - GBV

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