| | Copyright |
| | Addison-Wesley Professional Computing Series |
| | Foreword |
| | Preface |
|
| | Introduction |
|
| | Changes from the Second Edition |
|
| | Using This Book |
|
| | Source Code and Errata Availability |
|
| | Acknowledgments |
|
| |
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 |
|
| | Exercises |
|
|
| |
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 |
|
| | Exercises |
|
|
| |
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 |
|
| | Exercises |
|
|
| |
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 |
|
| | Exercises |
|
|
| |
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 |
|
| | Exercises |
|
|
| |
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 |
|
| | Exercises |
|
|
| |
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 |
|
| | Exercises |
|
|
| |
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 |
|
| | Exercises |
|
|
| |
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 |
|
| | Exercises |
|
|
| |
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 |
|
| | Exercises |
|
|
| |
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 |
|
| | Exercises |
|
|
| |
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 |
|
| | Exercises |
|
|
| |
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 |
|
| | Exercises |
|
|
| |
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 |
|
| | Exercises |
|
|
| |
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 |
|
| | Exercises |
|
|
| |
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 |
|
| | Exercises |
|
|
| |
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 |
|
| | Exercises |
|
|
| |
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 |
|
| | Exercises |
|
|
| |
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 |
|
| | Exercises |
|
|
| |
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 |
|
| | Exercises |
|
|
| |
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 |
|
| | Exercises |
|
|
| |
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 |
|
| | Exercises |
|
|
| |
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 |
|
| | Exercises |
|
|
| |
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 |
|
| | Exercises |
|
|
| |
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 |
|
| | Exercises |
|
|
| |
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 |
|
| | Exercises |
|
|
| |
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 |
|
| | Exercises |
|
|
| |
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 |
|
| | Exercises |
|
|
| |
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 |
|
| | Exercises |
|
|
| |
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 |
|
| | Exercises |
|
|
| |
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 |
|
| | Exercises |
|
|
| |
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 |
|
| |
Bibliography |