Previous Section Next Section

Table of Contents
UNIX® Network Programming Volume 1, Third Edition: The Sockets Networking API
By W. Richard Stevens, Bill Fenner, Andrew M. Rudoff
Publisher : Addison Wesley
Pub Date : November 21, 2003
ISBN : 0-13-141155-1
Pages : 1024

Addison-Wesley Professional Computing Series
Changes from the Second Edition
Using This Book
Source Code and Errata Availability
Part 1: Introduction and TCP/IP
Chapter 1. Introduction
Section 1.1. Introduction
Section 1.2. A Simple Daytime Client
Section 1.3. Protocol Independence
Section 1.4. Error Handling: Wrapper Functions
Section 1.5. A Simple Daytime Server
Section 1.6. Roadmap to Client/Server Examples in the Text
Section 1.7. OSI Model
Section 1.8. BSD Networking History
Section 1.9. Test Networks and Hosts
Section 1.10. Unix Standards
Section 1.11. 64-Bit Architectures
Section 1.12. Summary
Chapter 2. The Transport Layer: TCP, UDP, and SCTP
Section 2.1. Introduction
Section 2.2. The Big Picture
Section 2.3. User Datagram Protocol (UDP)
Section 2.4. Transmission Control Protocol (TCP)
Section 2.5. Stream Control Transmission Protocol (SCTP)
Section 2.6. TCP Connection Establishment and Termination
Section 2.7. TIME_WAIT State
Section 2.8. SCTP Association Establishment and Termination
Section 2.9. Port Numbers
Section 2.10. TCP Port Numbers and Concurrent Servers
Section 2.11. Buffer Sizes and Limitations
Section 2.12. Standard Internet Services
Section 2.13. Protocol Usage by Common Internet Applications
Section 2.14. Summary
Part 2: Elementary Sockets
Chapter 3. Sockets Introduction
Section 3.1. Introduction
Section 3.2. Socket Address Structures
Section 3.3. Value-Result Arguments
Section 3.4. Byte Ordering Functions
Section 3.5. Byte Manipulation Functions
Section 3.6. inet_aton, inet_addr, and inet_ntoa Functions
Section 3.7. inet_pton and inet_ntop Functions
Section 3.8. sock_ntop and Related Functions
Section 3.9. readn, writen, and readline Functions
Section 3.10. Summary
Chapter 4. Elementary TCP Sockets
Section 4.1. Introduction
Section 4.2. socket Function
Section 4.3. connect Function
Section 4.4. bind Function
Section 4.5. listen Function
Section 4.6. accept Function
Section 4.7. fork and exec Functions
Section 4.8. Concurrent Servers
Section 4.9. close Function
Section 4.10. getsockname and getpeername Functions
Section 4.11. Summary
Chapter 5. TCP Client/Server Example
Section 5.1. Introduction
Section 5.2. TCP Echo Server: main Function
Section 5.3. TCP Echo Server: str_echo Function
Section 5.4. TCP Echo Client: main Function
Section 5.5. TCP Echo Client: str_cli Function
Section 5.6. Normal Startup
Section 5.7. Normal Termination
Section 5.8. POSIX Signal Handling
Section 5.9. Handling SIGCHLD Signals
Section 5.10. wait and waitpid Functions
Section 5.11. Connection Abort before accept Returns
Section 5.12. Termination of Server Process
Section 5.13. SIGPIPE Signal
Section 5.14. Crashing of Server Host
Section 5.15. Crashing and Rebooting of Server Host
Section 5.16. Shutdown of Server Host
Section 5.17. Summary of TCP Example
Section 5.18. Data Format
Section 5.19. Summary
Chapter 6. I/O Multiplexing: The select and poll Functions
Section 6.1. Introduction
Section 6.2. I/O Models
Section 6.3. select Function
Section 6.4. str_cli Function (Revisited)
Section 6.5. Batch Input and Buffering
Section 6.6. shutdown Function
Section 6.7. str_cli Function (Revisited Again)
Section 6.8. TCP Echo Server (Revisited)
Section 6.9. pselect Function
Section 6.10. poll Function
Section 6.11. TCP Echo Server (Revisited Again)
Section 6.12. Summary
Chapter 7. Socket Options
Section 7.1. Introduction
Section 7.2. getsockopt and setsockopt Functions
Section 7.3. Checking if an Option Is Supported and Obtaining the Default
Section 7.4. Socket States
Section 7.5. Generic Socket Options
Section 7.6. IPv4 Socket Options
Section 7.7. ICMPv6 Socket Option
Section 7.8. IPv6 Socket Options
Section 7.9. TCP Socket Options
Section 7.10. SCTP Socket Options
Section 7.11. fcntl Function
Section 7.12. Summary
Chapter 8. Elementary UDP Sockets
Section 8.1. Introduction
Section 8.2. recvfrom and sendto Functions
Section 8.3. UDP Echo Server: main Function
Section 8.4. UDP Echo Server: dg_echo Function
Section 8.5. UDP Echo Client: main Function
Section 8.6. UDP Echo Client: dg_cli Function
Section 8.7. Lost Datagrams
Section 8.8. Verifying Received Response
Section 8.9. Server Not Running
Section 8.10. Summary of UDP Example
Section 8.11. connect Function with UDP
Section 8.12. dg_cli Function (Revisited)
Section 8.13. Lack of Flow Control with UDP
Section 8.14. Determining Outgoing Interface with UDP
Section 8.15. TCP and UDP Echo Server Using select
Section 8.16. Summary
Chapter 9. Elementary SCTP Sockets
Section 9.1. Introduction
Section 9.2. Interface Models
Section 9.3. sctp_bindx Function
Section 9.4. sctp_connectx Function
Section 9.5. sctp_getpaddrs Function
Section 9.6. sctp_freepaddrs Function
Section 9.7. sctp_getladdrs Function
Section 9.8. sctp_freeladdrs Function
Section 9.9. sctp_sendmsg Function
Section 9.10. sctp_recvmsg Function
Section 9.11. sctp_opt_info Function
Section 9.12. sctp_peeloff Function
Section 9.13. shutdown Function
Section 9.14. Notifications
Section 9.15. Summary
Chapter 10. SCTP Client/Server Example
Section 10.1. Introduction
Section 10.2. SCTP One-to-Many-Style Streaming Echo Server: main Function
Section 10.3. SCTP One-to-Many-Style Streaming Echo Client: main Function
Section 10.4. SCTP Streaming Echo Client: str_cli Function
Section 10.5. Exploring Head-of-Line Blocking
Section 10.6. Controlling the Number of Streams
Section 10.7. Controlling Termination
Section 10.8. Summary
Chapter 11. Name and Address Conversions
Section 11.1. Introduction
Section 11.2. Domain Name System (DNS)
Section 11.3. gethostbyname Function
Section 11.4. gethostbyaddr Function
Section 11.5. getservbyname and getservbyport Functions
Section 11.6. getaddrinfo Function
Section 11.7. gai_strerror Function
Section 11.8. freeaddrinfo Function
Section 11.9. getaddrinfo Function: IPv6
Section 11.10. getaddrinfo Function: Examples
Section 11.11. host_serv Function
Section 11.12. tcp_connect Function
Section 11.13. tcp_listen Function
Section 11.14. udp_client Function
Section 11.15. udp_connect Function
Section 11.16. udp_server Function
Section 11.17. getnameinfo Function
Section 11.18. Re-entrant Functions
Section 11.19. gethostbyname_r and gethostbyaddr_r Functions
Section 11.20. Obsolete IPv6 Address Lookup Functions
Section 11.21. Other Networking Information
Section 11.22. Summary
Part 3: Advanced Sockets
Chapter 12. IPv4 and IPv6 Interoperability
Section 12.1. Introduction
Section 12.2. IPv4 Client, IPv6 Server
Section 12.3. IPv6 Client, IPv4 Server
Section 12.4. IPv6 Address-Testing Macros
Section 12.5. Source Code Portability
Section 12.6. Summary
Chapter 13. Daemon Processes and the inetd Superserver
Section 13.1. Introduction
Section 13.2. syslogd Daemon
Section 13.3. syslog Function
Section 13.4. daemon_init Function
Section 13.5. inetd Daemon
Section 13.6. daemon_inetd Function
Section 13.7. Summary
Chapter 14. Advanced I/O Functions
Section 14.1. Introduction
Section 14.2. Socket Timeouts
Section 14.3. recv and send Functions
Section 14.4. readv and writev Functions
Section 14.5. recvmsg and sendmsg Functions
Section 14.6. Ancillary Data
Section 14.7. How Much Data Is Queued?
Section 14.8. Sockets and Standard I/O
Section 14.9. Advanced Polling
Section 14.10. Summary
Chapter 15. Unix Domain Protocols
Section 15.1. Introduction
Section 15.2. Unix Domain Socket Address Structure
Section 15.3. socketpair Function
Section 15.4. Socket Functions
Section 15.5. Unix Domain Stream Client/Server
Section 15.6. Unix Domain Datagram Client/Server
Section 15.7. Passing Descriptors
Section 15.8. Receiving Sender Credentials
Section 15.9. Summary
Chapter 16. Nonblocking I/O
Section 16.1. Introduction
Section 16.2. Nonblocking Reads and Writes: str_cli Function (Revisited)
Section 16.3. Nonblocking connect
Section 16.4. Nonblocking connect: Daytime Client
Section 16.5. Nonblocking connect: Web Client
Section 16.6. Nonblocking accept
Section 16.7. Summary
Chapter 17. ioctl Operations
Section 17.1. Introduction
Section 17.2. ioctl Function
Section 17.3. Socket Operations
Section 17.4. File Operations
Section 17.5. Interface Configuration
Section 17.6. get_ifi_info Function
Section 17.7. Interface Operations
Section 17.8. ARP Cache Operations
Section 17.9. Routing Table Operations
Section 17.10. Summary
Chapter 18. Routing Sockets
Section 18.1. Introduction
Section 18.2. Datalink Socket Address Structure
Section 18.3. Reading and Writing
Section 18.4. sysctl Operations
Section 18.5. get_ifi_info Function (Revisited)
Section 18.6. Interface Name and Index Functions
Section 18.7. Summary
Chapter 19. Key Management Sockets
Section 19.1. Introduction
Section 19.2. Reading and Writing
Section 19.3. Dumping the Security Association Database (SADB)
Section 19.4. Creating a Static Security Association (SA)
Section 19.5. Dynamically Maintaining SAs
Section 19.6. Summary
Chapter 20. Broadcasting
Section 20.1. Introduction
Section 20.2. Broadcast Addresses
Section 20.3. Unicast versus Broadcast
Section 20.4. dg_cli Function Using Broadcasting
Section 20.5. Race Conditions
Section 20.6. Summary
Chapter 21. Multicasting
Section 21.1. Introduction
Section 21.2. Multicast Addresses
Section 21.3. Multicasting versus Broadcasting on a LAN
Section 21.4. Multicasting on a WAN
Section 21.5. Source-Specific Multicast
Section 21.6. Multicast Socket Options
Section 21.7. mcast_join and Related Functions
Section 21.8. dg_cli Function Using Multicasting
Section 21.9. Receiving IP Multicast Infrastructure Session Announcements
Section 21.10. Sending and Receiving
Section 21.11. Simple Network Time Protocol (SNTP)
Section 21.12. Summary
Chapter 22. Advanced UDP Sockets
Section 22.1. Introduction
Section 22.2. Receiving Flags, Destination IP Address, and Interface Index
Section 22.3. Datagram Truncation
Section 22.4. When to Use UDP Instead of TCP
Section 22.5. Adding Reliability to a UDP Application
Section 22.6. Binding Interface Addresses
Section 22.7. Concurrent UDP Servers
Section 22.8. IPv6 Packet Information
Section 22.9. IPv6 Path MTU Control
Section 22.10. Summary
Chapter 23. Advanced SCTP Sockets
Section 23.1. Introduction
Section 23.2. An Autoclosing One-to-Many-Style Server
Section 23.3. Partial Delivery
Section 23.4. Notifications
Section 23.5. Unordered Data
Section 23.6. Binding a Subset of Addresses
Section 23.7. Determining Peer and Local Address Information
Section 23.8. Finding an Association ID Given an IP Address
Section 23.9. Heartbeating and Address Failure
Section 23.10. Peeling Off an Association
Section 23.11. Controlling Timing
Section 23.12. When to Use SCTP Instead of TCP
Section 23.13. Summary
Chapter 24. Out-of-Band Data
Section 24.1. Introduction
Section 24.2. TCP Out-of-Band Data
Section 24.3. sockatmark Function
Section 24.4. TCP Out-of-Band Data Recap
Section 24.5. Summary
Chapter 25. Signal-Driven I/O
Section 25.1. Introduction
Section 25.2. Signal-Driven I/O for Sockets
Section 25.3. UDP Echo Server Using SIGIO
Section 25.4. Summary
Chapter 26. Threads
Section 26.1. Introduction
Section 26.2. Basic Thread Functions: Creation and Termination
Section 26.3. str_cli Function Using Threads
Section 26.4. TCP Echo Server Using Threads
Section 26.5. Thread-Specific Data
Section 26.6. Web Client and Simultaneous Connections (Continued)
Section 26.7. Mutexes: Mutual Exclusion
Section 26.8. Condition Variables
Section 26.9. Web Client and Simultaneous Connections (Continued)
Section 26.10. Summary
Chapter 27. IP Options
Section 27.1. Introduction
Section 27.2. IPv4 Options
Section 27.3. IPv4 Source Route Options
Section 27.4. IPv6 Extension Headers
Section 27.5. IPv6 Hop-by-Hop Options and Destination Options
Section 27.6. IPv6 Routing Header
Section 27.7. IPv6 Sticky Options
Section 27.8. Historical IPv6 Advanced API
Section 27.9. Summary
Chapter 28. Raw Sockets
Section 28.1. Introduction
Section 28.2. Raw Socket Creation
Section 28.3. Raw Socket Output
Section 28.4. Raw Socket Input
Section 28.5. ping Program
Section 28.6. traceroute Program
Section 28.7. An ICMP Message Daemon
Section 28.8. Summary
Chapter 29. Datalink Access
Section 29.1. Introduction
Section 29.2. BSD Packet Filter (BPF)
Section 29.3. Datalink Provider Interface (DLPI)
Section 29.4. Linux: SOCK_PACKET and PF_PACKET
Section 29.5. libpcap: Packet Capture Library
Section 29.6. libnet: Packet Creation and Injection Library
Section 29.7. Examining the UDP Checksum Field
Section 29.8. Summary
Chapter 30. Client/Server Design Alternatives
Section 30.1. Introduction
Section 30.2. TCP Client Alternatives
Section 30.3. TCP Test Client
Section 30.4. TCP Iterative Server
Section 30.5. TCP Concurrent Server, One Child per Client
Section 30.6. TCP Preforked Server, No Locking Around accept
Section 30.7. TCP Preforked Server, File Locking Around accept
Section 30.8. TCP Preforked Server, Thread Locking Around accept
Section 30.9. TCP Preforked Server, Descriptor Passing
Section 30.10. TCP Concurrent Server, One Thread per Client
Section 30.11. TCP Prethreaded Server, per-Thread accept
Section 30.12. TCP Prethreaded Server, Main Thread accept
Section 30.13. Summary
Chapter 31. Streams
Section 31.1. Introduction
Section 31.2. Overview
Section 31.3. getmsg and putmsg Functions
Section 31.4. getpmsg and putpmsg Functions
Section 31.5. ioctl Function
Section 31.6. Transport Provider Interface (TPI)
Section 31.7. Summary
Appendix A. IPv4, IPv6, ICMPv4, and ICMPv6
Section A.1. Introduction
Section A.2. IPv4 Header
Section A.3. IPv6 Header
Section A.4. IPv4 Addresses
Section A.5. IPv6 Addresses
Section A.6. Internet Control Message Protocols (ICMPv4 and ICMPv6)
Appendix B. Virtual Networks
Section B.1. Introduction
Section B.2. The MBone
Section B.3. The 6bone
Section B.4. IPv6 Transition: 6to4
Appendix C. Debugging Techniques
Section C.1. System Call Tracing
Section C.2. Standard Internet Services
Section C.3. sock Program
Section C.4. Small Test Programs
Section C.5. tcpdump Program
Section C.6. netstat Program
Section C.7. lsof Program
Appendix D. Miscellaneous Source Code
Section D.1. unp.h Header
Section D.2. config.h Header
Section D.3. Standard Error Functions
Appendix E. Solutions to Selected Exercises
Chapter 1
Chapter 2
Chapter 3
Chapter 4
Chapter 5
Chapter 6
Chapter 7
Chapter 8
Chapter 9
Chapter 10
Chapter 11
Chapter 12
Chapter 13
Chapter 14
Chapter 15
Chapter 16
Chapter 17
Chapter 18
Chapter 20
Chapter 21
Chapter 22
Chapter 24
Chapter 25
Chapter 26
Chapter 27
Chapter 28
Chapter 29
Chapter 30
Chapter 31
Previous Section Next Section