Tải bản đầy đủ (.pdf) (1,138 trang)

Unix network programming volume 1

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (13.7 MB, 1,138 trang )

[ Team LiB ]



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
"Everyone will want this book because it provides a great mix of practical experience, historical
perspective, and a depth of understanding that only comes from being intimately involved in
the field. I've already enjoyed and learned from reading this book, and surely you will too."
-Sam Leffler
The classic guide to UNIX networking APIs now completely updated!
To build today's highly distributed, networked applications and services, you need deep
mastery of sockets and other key networking APIs. One book delivers comprehensive, start-to-
finish guidance for building robust, high-performance networked systems in any environment:
UNIX Network Programming, Volume 1, Third Edition


.
Building on the legendary work of W. Richard Stevens, this edition has been fully updated by
two leading network programming experts to address today's most crucial standards,
implementations, and techniques. New topics include:
POSIX Single UNIX Specification Version 3
IPv6 APIs (including updated guidance on IPv6/IPv4 interoperability)
The new SCTP transport protocol
IPsec-based Key Management Sockets
FreeBSD 4.8/5.1, Red Hat Linux 9.x, Solaris 9, AIX 5.x, HP-UX, and Mac OS X
implementations
New network program debugging techniques
Source Specific Multicast API, the key enabler for widespread IP multicast deployment
[ Team LiB ]



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
"Everyone will want this book because it provides a great mix of practical experience, historical
perspective, and a depth of understanding that only comes from being intimately involved in
the field. I've already enjoyed and learned from reading this book, and surely you will too."
-Sam Leffler
The classic guide to UNIX networking APIs now completely updated!
To build today's highly distributed, networked applications and services, you need deep
mastery of sockets and other key networking APIs. One book delivers comprehensive, start-to-
finish guidance for building robust, high-performance networked systems in any environment:
UNIX Network Programming, Volume 1, Third Edition
.
Building on the legendary work of W. Richard Stevens, this edition has been fully updated by
two leading network programming experts to address today's most crucial standards,
implementations, and techniques. New topics include:
POSIX Single UNIX Specification Version 3
IPv6 APIs (including updated guidance on IPv6/IPv4 interoperability)
The new SCTP transport protocol
IPsec-based Key Management Sockets
FreeBSD 4.8/5.1, Red Hat Linux 9.x, Solaris 9, AIX 5.x, HP-UX, and Mac OS X
implementations
New network program debugging techniques
Source Specific Multicast API, the key enabler for widespread IP multicast deployment
The authors also update and extend Stevens' definitive coverage of these crucial UNIX
networking standards and techniques:
TCP and UDP transport
Sockets: elementary, advanced, routed, and raw
I/O: multiplexing, advanced functions, nonblocking, and signal-driven

Daemons and inetd
UNIX domain protocols
ioctl operations
Broadcasting and multicasting
Threads
Streams
Design: TCP iterative, concurrent, preforked, and prethreaded servers
Since 1990, network programmers have turned to one source for the insights and techniques
they need: W. Richard Stevens' U
NIX Network Programming
. Now, there's an edition
specifically designed for today's challenges-and tomorrow's.
[ Team LiB ]
[ Team LiB ]



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
"Everyone will want this book because it provides a great mix of practical experience, historical
perspective, and a depth of understanding that only comes from being intimately involved in
the field. I've already enjoyed and learned from reading this book, and surely you will too."
-Sam Leffler
The classic guide to UNIX networking APIs now completely updated!
To build today's highly distributed, networked applications and services, you need deep
mastery of sockets and other key networking APIs. One book delivers comprehensive, start-to-
finish guidance for building robust, high-performance networked systems in any environment:
UNIX Network Programming, Volume 1, Third Edition
.
Building on the legendary work of W. Richard Stevens, this edition has been fully updated by
two leading network programming experts to address today's most crucial standards,
implementations, and techniques. New topics include:
POSIX Single UNIX Specification Version 3
IPv6 APIs (including updated guidance on IPv6/IPv4 interoperability)
The new SCTP transport protocol
IPsec-based Key Management Sockets
FreeBSD 4.8/5.1, Red Hat Linux 9.x, Solaris 9, AIX 5.x, HP-UX, and Mac OS X
implementations
New network program debugging techniques
Source Specific Multicast API, the key enabler for widespread IP multicast deployment
[ Team LiB ]





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

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)
[ Team LiB ]



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
"Everyone will want this book because it provides a great mix of practical experience, historical
perspective, and a depth of understanding that only comes from being intimately involved in
the field. I've already enjoyed and learned from reading this book, and surely you will too."
-Sam Leffler
The classic guide to UNIX networking APIs now completely updated!
To build today's highly distributed, networked applications and services, you need deep
mastery of sockets and other key networking APIs. One book delivers comprehensive, start-to-
finish guidance for building robust, high-performance networked systems in any environment:
UNIX Network Programming, Volume 1, Third Edition
.
Building on the legendary work of W. Richard Stevens, this edition has been fully updated by
two leading network programming experts to address today's most crucial standards,
implementations, and techniques. New topics include:
POSIX Single UNIX Specification Version 3
IPv6 APIs (including updated guidance on IPv6/IPv4 interoperability)
The new SCTP transport protocol
IPsec-based Key Management Sockets
FreeBSD 4.8/5.1, Red Hat Linux 9.x, Solaris 9, AIX 5.x, HP-UX, and Mac OS X
implementations
New network program debugging techniques
Source Specific Multicast API, the key enabler for widespread IP multicast deployment


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
[ Team LiB ]



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
"Everyone will want this book because it provides a great mix of practical experience, historical
perspective, and a depth of understanding that only comes from being intimately involved in
the field. I've already enjoyed and learned from reading this book, and surely you will too."
-Sam Leffler
The classic guide to UNIX networking APIs now completely updated!

To build today's highly distributed, networked applications and services, you need deep
mastery of sockets and other key networking APIs. One book delivers comprehensive, start-to-
finish guidance for building robust, high-performance networked systems in any environment:
UNIX Network Programming, Volume 1, Third Edition
.
Building on the legendary work of W. Richard Stevens, this edition has been fully updated by
two leading network programming experts to address today's most crucial standards,
implementations, and techniques. New topics include:
POSIX Single UNIX Specification Version 3
IPv6 APIs (including updated guidance on IPv6/IPv4 interoperability)
The new SCTP transport protocol
IPsec-based Key Management Sockets
FreeBSD 4.8/5.1, Red Hat Linux 9.x, Solaris 9, AIX 5.x, HP-UX, and Mac OS X
implementations
New network program debugging techniques
Source Specific Multicast API, the key enabler for widespread IP multicast deployment


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
[ Team LiB ]



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
"Everyone will want this book because it provides a great mix of practical experience, historical
perspective, and a depth of understanding that only comes from being intimately involved in
the field. I've already enjoyed and learned from reading this book, and surely you will too."
-Sam Leffler
The classic guide to UNIX networking APIs now completely updated!
To build today's highly distributed, networked applications and services, you need deep
mastery of sockets and other key networking APIs. One book delivers comprehensive, start-to-
finish guidance for building robust, high-performance networked systems in any environment:
UNIX Network Programming, Volume 1, Third Edition
.
Building on the legendary work of W. Richard Stevens, this edition has been fully updated by
two leading network programming experts to address today's most crucial standards,
implementations, and techniques. New topics include:
POSIX Single UNIX Specification Version 3
IPv6 APIs (including updated guidance on IPv6/IPv4 interoperability)
The new SCTP transport protocol
IPsec-based Key Management Sockets
FreeBSD 4.8/5.1, Red Hat Linux 9.x, Solaris 9, AIX 5.x, HP-UX, and Mac OS X
implementations
New network program debugging techniques
Source Specific Multicast API, the key enabler for widespread IP multicast deployment


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
[ Team LiB ]



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
"Everyone will want this book because it provides a great mix of practical experience, historical
perspective, and a depth of understanding that only comes from being intimately involved in
the field. I've already enjoyed and learned from reading this book, and surely you will too."
-Sam Leffler
The classic guide to UNIX networking APIs now completely updated!
To build today's highly distributed, networked applications and services, you need deep
mastery of sockets and other key networking APIs. One book delivers comprehensive, start-to-
finish guidance for building robust, high-performance networked systems in any environment:
UNIX Network Programming, Volume 1, Third Edition
.
Building on the legendary work of W. Richard Stevens, this edition has been fully updated by
two leading network programming experts to address today's most crucial standards,
implementations, and techniques. New topics include:
POSIX Single UNIX Specification Version 3
IPv6 APIs (including updated guidance on IPv6/IPv4 interoperability)
The new SCTP transport protocol
IPsec-based Key Management Sockets
FreeBSD 4.8/5.1, Red Hat Linux 9.x, Solaris 9, AIX 5.x, HP-UX, and Mac OS X
implementations
New network program debugging techniques
Source Specific Multicast API, the key enabler for widespread IP multicast deployment


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
[ Team LiB ]



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
"Everyone will want this book because it provides a great mix of practical experience, historical
perspective, and a depth of understanding that only comes from being intimately involved in
the field. I've already enjoyed and learned from reading this book, and surely you will too."
-Sam Leffler
The classic guide to UNIX networking APIs now completely updated!
To build today's highly distributed, networked applications and services, you need deep
mastery of sockets and other key networking APIs. One book delivers comprehensive, start-to-
finish guidance for building robust, high-performance networked systems in any environment:
UNIX Network Programming, Volume 1, Third Edition
.
Building on the legendary work of W. Richard Stevens, this edition has been fully updated by
two leading network programming experts to address today's most crucial standards,
implementations, and techniques. New topics include:
POSIX Single UNIX Specification Version 3
IPv6 APIs (including updated guidance on IPv6/IPv4 interoperability)
The new SCTP transport protocol

IPsec-based Key Management Sockets
FreeBSD 4.8/5.1, Red Hat Linux 9.x, Solaris 9, AIX 5.x, HP-UX, and Mac OS X
implementations
New network program debugging techniques
Source Specific Multicast API, the key enabler for widespread IP multicast deployment


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
[ Team LiB ]



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
"Everyone will want this book because it provides a great mix of practical experience, historical
perspective, and a depth of understanding that only comes from being intimately involved in
the field. I've already enjoyed and learned from reading this book, and surely you will too."
-Sam Leffler
The classic guide to UNIX networking APIs now completely updated!

To build today's highly distributed, networked applications and services, you need deep
mastery of sockets and other key networking APIs. One book delivers comprehensive, start-to-
finish guidance for building robust, high-performance networked systems in any environment:
UNIX Network Programming, Volume 1, Third Edition
.
Building on the legendary work of W. Richard Stevens, this edition has been fully updated by
two leading network programming experts to address today's most crucial standards,
implementations, and techniques. New topics include:
POSIX Single UNIX Specification Version 3
IPv6 APIs (including updated guidance on IPv6/IPv4 interoperability)
The new SCTP transport protocol
IPsec-based Key Management Sockets
FreeBSD 4.8/5.1, Red Hat Linux 9.x, Solaris 9, AIX 5.x, HP-UX, and Mac OS X
implementations
New network program debugging techniques
Source Specific Multicast API, the key enabler for widespread IP multicast deployment


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
[ Team LiB ]



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

"Everyone will want this book because it provides a great mix of practical experience, historical
perspective, and a depth of understanding that only comes from being intimately involved in
the field. I've already enjoyed and learned from reading this book, and surely you will too."
-Sam Leffler
The classic guide to UNIX networking APIs now completely updated!
To build today's highly distributed, networked applications and services, you need deep
mastery of sockets and other key networking APIs. One book delivers comprehensive, start-to-
finish guidance for building robust, high-performance networked systems in any environment:
UNIX Network Programming, Volume 1, Third Edition
.
Building on the legendary work of W. Richard Stevens, this edition has been fully updated by
two leading network programming experts to address today's most crucial standards,
implementations, and techniques. New topics include:
POSIX Single UNIX Specification Version 3
IPv6 APIs (including updated guidance on IPv6/IPv4 interoperability)
The new SCTP transport protocol
IPsec-based Key Management Sockets
FreeBSD 4.8/5.1, Red Hat Linux 9.x, Solaris 9, AIX 5.x, HP-UX, and Mac OS X
implementations
New network program debugging techniques
Source Specific Multicast API, the key enabler for widespread IP multicast deployment


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
[ Team LiB ]



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
"Everyone will want this book because it provides a great mix of practical experience, historical
perspective, and a depth of understanding that only comes from being intimately involved in
the field. I've already enjoyed and learned from reading this book, and surely you will too."
-Sam Leffler
The classic guide to UNIX networking APIs now completely updated!
To build today's highly distributed, networked applications and services, you need deep

mastery of sockets and other key networking APIs. One book delivers comprehensive, start-to-
finish guidance for building robust, high-performance networked systems in any environment:
UNIX Network Programming, Volume 1, Third Edition
.
Building on the legendary work of W. Richard Stevens, this edition has been fully updated by
two leading network programming experts to address today's most crucial standards,
implementations, and techniques. New topics include:
POSIX Single UNIX Specification Version 3
IPv6 APIs (including updated guidance on IPv6/IPv4 interoperability)
The new SCTP transport protocol
IPsec-based Key Management Sockets
FreeBSD 4.8/5.1, Red Hat Linux 9.x, Solaris 9, AIX 5.x, HP-UX, and Mac OS X
implementations
New network program debugging techniques
Source Specific Multicast API, the key enabler for widespread IP multicast deployment


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

[ Team LiB ]

[ Team LiB ]



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
"Everyone will want this book because it provides a great mix of practical experience, historical
perspective, and a depth of understanding that only comes from being intimately involved in
the field. I've already enjoyed and learned from reading this book, and surely you will too."
-Sam Leffler
The classic guide to UNIX networking APIs now completely updated!
To build today's highly distributed, networked applications and services, you need deep

mastery of sockets and other key networking APIs. One book delivers comprehensive, start-to-
finish guidance for building robust, high-performance networked systems in any environment:
UNIX Network Programming, Volume 1, Third Edition
.
Building on the legendary work of W. Richard Stevens, this edition has been fully updated by
two leading network programming experts to address today's most crucial standards,
implementations, and techniques. New topics include:
POSIX Single UNIX Specification Version 3
IPv6 APIs (including updated guidance on IPv6/IPv4 interoperability)
The new SCTP transport protocol
IPsec-based Key Management Sockets
FreeBSD 4.8/5.1, Red Hat Linux 9.x, Solaris 9, AIX 5.x, HP-UX, and Mac OS X
implementations
New network program debugging techniques
Source Specific Multicast API, the key enabler for widespread IP multicast deployment
[ Team LiB ]

Copyright
Many of the designations used by manufacturers and sellers to distinguish their products are
claimed as trademarks. Where those designations appear in this book, and Addison-Wesley
was aware of a trademark claim, the designations have been printed with initial capital letters
or in all capitals.
The authors and publisher have taken care in the preparation of this book, but make no
expressed or implied warranty of any kind and assume no responsibility for errors or
omissions. No liability is assumed for incidental or consequential damages in connection with or
arising out of the use of the information or programs contained herein.
The publisher offers discounts on this book when ordered in quantity for bulk purchases and
special sales. For more information, please contact:
U.S. Corporate and Government Sales
(800) 382-3419



For sales outside of the U.S., please contact:
International Sales
(317) 581-3793


Visit Addison-Wesley on the Web:
www.awprofessional.com
Library of Congress Cataloging-in-Publication Data
A CIP catalog record for this book can be obtained from the Library of Congress.
Copyright © 2004 by Pearson Education, Inc.
All rights reserved. No part of this publication may be reproduced, stored in a retrieval system,
or transmitted, in any form, or by any means, electronic, mechanical, photocopying, recording,
or otherwise, without the prior consent of the publisher. Printed in the United States of
America. Published simultaneously in Canada.
For information on obtaining permission for use of material from this work, please submit a
written request to:
Pearson Education, Inc.
Rights and Contracts Department
75 Arlington Street, Suite 300
Boston, MA 02116
Fax: (617) 848-7047
Text printed on recycled paper
First printing
Dedication
To Rich
.
[ Team LiB ]




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
"Everyone will want this book because it provides a great mix of practical experience, historical
perspective, and a depth of understanding that only comes from being intimately involved in
the field. I've already enjoyed and learned from reading this book, and surely you will too."
-Sam Leffler
The classic guide to UNIX networking APIs now completely updated!
To build today's highly distributed, networked applications and services, you need deep
mastery of sockets and other key networking APIs. One book delivers comprehensive, start-to-
finish guidance for building robust, high-performance networked systems in any environment:
UNIX Network Programming, Volume 1, Third Edition
.

Building on the legendary work of W. Richard Stevens, this edition has been fully updated by
two leading network programming experts to address today's most crucial standards,
implementations, and techniques. New topics include:
POSIX Single UNIX Specification Version 3
IPv6 APIs (including updated guidance on IPv6/IPv4 interoperability)
The new SCTP transport protocol
IPsec-based Key Management Sockets
FreeBSD 4.8/5.1, Red Hat Linux 9.x, Solaris 9, AIX 5.x, HP-UX, and Mac OS X
implementations
New network program debugging techniques
Source Specific Multicast API, the key enabler for widespread IP multicast deployment
Aloha nui loa
.
[ Team LiB ]

[ Team LiB ]



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
"Everyone will want this book because it provides a great mix of practical experience, historical
perspective, and a depth of understanding that only comes from being intimately involved in
the field. I've already enjoyed and learned from reading this book, and surely you will too."
-Sam Leffler
The classic guide to UNIX networking APIs now completely updated!
To build today's highly distributed, networked applications and services, you need deep
mastery of sockets and other key networking APIs. One book delivers comprehensive, start-to-
finish guidance for building robust, high-performance networked systems in any environment:
UNIX Network Programming, Volume 1, Third Edition
.
Building on the legendary work of W. Richard Stevens, this edition has been fully updated by
two leading network programming experts to address today's most crucial standards,
implementations, and techniques. New topics include:
POSIX Single UNIX Specification Version 3
IPv6 APIs (including updated guidance on IPv6/IPv4 interoperability)
The new SCTP transport protocol
IPsec-based Key Management Sockets
FreeBSD 4.8/5.1, Red Hat Linux 9.x, Solaris 9, AIX 5.x, HP-UX, and Mac OS X
implementations
New network program debugging techniques
Source Specific Multicast API, the key enabler for widespread IP multicast deployment
[ Team LiB ]


Addison-Wesley Professional
Computing Series
Brian W. Kernighan and Craig Partridge, Consulting Editors
Matthew H. Austern,
Generic Programming and the STL: Using and Extending the C++
Standard Template Library
David R. Butenhof,
Programming with POSIX® Threads
Brent Callaghan,
NFS Illustrated
Tom Cargill,
C++ Programming Style
William R. Cheswick/Steven M. Bellovin/Aviel D. Rubin,
Firewalls and Internet Security, Second
Edition: Repelling the Wily Hacker
David A. Curry,
UNIX® System Security: A Guide for Users and System Administrators
Stephen C. Dewhurst,
C++ Gotchas: Avoiding Common Problems in Coding and Design
Erich Gamma/Richard Helm/Ralph Johnson/John Vlissides,
Design Patterns: Elements of
Reusable Object-Oriented Software
Erich Gamma/Richard Helm/Ralph Johnson/John Vlissides,
Design Patterns CD: Elements of
Reusable Object-Oriented Software
Peter Haggar,
Practical Java™ Programming Language Guide
David R. Hanson,
C Interfaces and Implementations: Techniques for Creating Reusable
Software

Mark Harrison/Michael McLennan,
Effective Tcl/Tk Programming: Writing Better Programs with
Tcl and Tk
Michi Henning/Steve Vinoski,
Advanced CORBA® Programming with C++
Brian W. Kernighan/Rob Pike,
The Practice of Programming
S. Keshav,
An Engineering Approach to Computer Networking: ATM Networks, the Internet,
and the Telephone Network
John Lakos,
Large-Scale C++ Software Design
Scott Meyers,
Effective C++ CD: 85 Specific Ways to Improve Your Programs and Designs
Scott Meyers,
Effective C++, Second Edition: 50 Specific Ways to Improve Your Programs and
Designs
Scott Meyers,
More Effective C++: 35 New Ways to Improve Your Programs and Designs
Scott Meyers,
Effective STL: 50 Specific Ways to Improve Your Use of the Standard Template
Library
Robert B. Murray,
C++ Strategies and Tactics
[ Team LiB ]



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
"Everyone will want this book because it provides a great mix of practical experience, historical
perspective, and a depth of understanding that only comes from being intimately involved in
the field. I've already enjoyed and learned from reading this book, and surely you will too."
-Sam Leffler
The classic guide to UNIX networking APIs now completely updated!
To build today's highly distributed, networked applications and services, you need deep
mastery of sockets and other key networking APIs. One book delivers comprehensive, start-to-
finish guidance for building robust, high-performance networked systems in any environment:
UNIX Network Programming, Volume 1, Third Edition
.
Building on the legendary work of W. Richard Stevens, this edition has been fully updated by
two leading network programming experts to address today's most crucial standards,
implementations, and techniques. New topics include:
POSIX Single UNIX Specification Version 3

IPv6 APIs (including updated guidance on IPv6/IPv4 interoperability)
The new SCTP transport protocol
IPsec-based Key Management Sockets
FreeBSD 4.8/5.1, Red Hat Linux 9.x, Solaris 9, AIX 5.x, HP-UX, and Mac OS X
implementations
New network program debugging techniques
Source Specific Multicast API, the key enabler for widespread IP multicast deployment
David R. Musser/Gillmer J. Derge/Atul Saini,
STL Tutorial and Reference Guide, Second Edition:
C++ Programming with the Standard Template Library
John K. Ousterhout,
Tcl and the Tk Toolkit
Craig Partridge,
Gigabit Networking
Radia Perlman,
Interconnections, Second Edition: Bridges, Routers, Switches, and
Internetworking Protocols
Stephen A. Rago,
UNIX® System V Network Programming
Curt Schimmel,
UNIX® Systems for Modern Architectures: Symmetric Multiprocessing and
Caching for Kernel Programmers
W. Richard Stevens/Bill Fenner/Andrew M. Rudoff,
UNIX Network Programming Volume 1,
Third Edition: The Sockets Networking API
W. Richard Stevens,
Advanced Programming in the UNIX® Environment
W. Richard Stevens,
TCP/IP Illustrated, Volume 1: The Protocols
W. Richard Stevens,

TCP/IP Illustrated, Volume 3: TCP for Transactions, HTTP, NNTP, and the
UNIX® Domain Protocols
W. Richard Stevens/Gary R. Wright,
TCP/IP Illustrated Volumes 1-3 Boxed Set
John Viega/Gary McGraw,
Building Secure Software: How to Avoid Security Problems the Right
Way
Gary R. Wright/W. Richard Stevens,
TCP/IP Illustrated, Volume 2: The Implementation
Ruixi Yuan/ W. Timothy Strayer,
Virtual Private Networks: Technologies and Solutions
Visit
www.awprofessional.com/series/professionalcomputing
for more information
about these titles.
[ Team LiB ]

[ Team LiB ]



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
"Everyone will want this book because it provides a great mix of practical experience, historical
perspective, and a depth of understanding that only comes from being intimately involved in
the field. I've already enjoyed and learned from reading this book, and surely you will too."
-Sam Leffler
The classic guide to UNIX networking APIs now completely updated!
To build today's highly distributed, networked applications and services, you need deep
mastery of sockets and other key networking APIs. One book delivers comprehensive, start-to-
finish guidance for building robust, high-performance networked systems in any environment:
UNIX Network Programming, Volume 1, Third Edition
.
Building on the legendary work of W. Richard Stevens, this edition has been fully updated by
two leading network programming experts to address today's most crucial standards,
implementations, and techniques. New topics include:
POSIX Single UNIX Specification Version 3
IPv6 APIs (including updated guidance on IPv6/IPv4 interoperability)
The new SCTP transport protocol
IPsec-based Key Management Sockets
FreeBSD 4.8/5.1, Red Hat Linux 9.x, Solaris 9, AIX 5.x, HP-UX, and Mac OS X
implementations
New network program debugging techniques
Source Specific Multicast API, the key enabler for widespread IP multicast deployment

[ Team LiB ]

Foreword
When the original text of this book arrived in 1990, it was quickly recognized as the definitive
reference for programmers to learn network programming techniques. Since then, the art of
computer networking has changed dramatically. All it takes is a look at the return address for
comments from the original text ("uunet!hsi!netbook") to make this clear. (How many readers
will even recognize this as an address in the UUCP dialup network that was commonplace in
the 1980s?)
Today, UUCP networks are a rarity and new technologies such as wireless networks are
becoming ubiquitous! With these changes, new network protocols and programming paradigms
have been developed. But, programmers have lacked a good reference from which to learn the
intricacies of these new techniques.
This book fills that void. Readers who have a dog-eared copy of the original book will want a
new copy for the updated programming techniques and the substantial new material describing
next-generation protocols such as IPv6. Everyone will want this book because it provides a
great mix of practical experience, historical perspective, and a depth of understanding that only
comes from being intimately involved in the field.
I've already enjoyed and learned from reading this book, and surely you will, too.
Sam Leffler
[ Team LiB ]

[ Team LiB ]



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
"Everyone will want this book because it provides a great mix of practical experience, historical
perspective, and a depth of understanding that only comes from being intimately involved in
the field. I've already enjoyed and learned from reading this book, and surely you will too."
-Sam Leffler
The classic guide to UNIX networking APIs now completely updated!
To build today's highly distributed, networked applications and services, you need deep
mastery of sockets and other key networking APIs. One book delivers comprehensive, start-to-
finish guidance for building robust, high-performance networked systems in any environment:
UNIX Network Programming, Volume 1, Third Edition
.
Building on the legendary work of W. Richard Stevens, this edition has been fully updated by
two leading network programming experts to address today's most crucial standards,
implementations, and techniques. New topics include:
POSIX Single UNIX Specification Version 3
IPv6 APIs (including updated guidance on IPv6/IPv4 interoperability)
The new SCTP transport protocol

IPsec-based Key Management Sockets
FreeBSD 4.8/5.1, Red Hat Linux 9.x, Solaris 9, AIX 5.x, HP-UX, and Mac OS X
implementations
New network program debugging techniques
Source Specific Multicast API, the key enabler for widespread IP multicast deployment
[ Team LiB ]

Preface
Introduction
Changes from the Second Edition
Using This Book
Source Code and Errata Availability
Acknowledgments
[ Team LiB ]

[ Team LiB ]



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
"Everyone will want this book because it provides a great mix of practical experience, historical
perspective, and a depth of understanding that only comes from being intimately involved in
the field. I've already enjoyed and learned from reading this book, and surely you will too."
-Sam Leffler
The classic guide to UNIX networking APIs now completely updated!
To build today's highly distributed, networked applications and services, you need deep
mastery of sockets and other key networking APIs. One book delivers comprehensive, start-to-
finish guidance for building robust, high-performance networked systems in any environment:
UNIX Network Programming, Volume 1, Third Edition
.
Building on the legendary work of W. Richard Stevens, this edition has been fully updated by
two leading network programming experts to address today's most crucial standards,
implementations, and techniques. New topics include:
POSIX Single UNIX Specification Version 3
IPv6 APIs (including updated guidance on IPv6/IPv4 interoperability)
The new SCTP transport protocol
IPsec-based Key Management Sockets
FreeBSD 4.8/5.1, Red Hat Linux 9.x, Solaris 9, AIX 5.x, HP-UX, and Mac OS X
implementations
New network program debugging techniques
Source Specific Multicast API, the key enabler for widespread IP multicast deployment
[ Team LiB ]


Introduction
This book is for people who want to write programs that communicate with each other using an
application program interface (API) known as sockets. Some readers may be very familiar with
sockets already, as that model has become synonymous with network programming. Others
may need an introduction to sockets from the ground up. The goal of this book is to offer
guidance on network programming for beginners as well as professionals, for those developing
new network-aware applications as well as those maintaining existing code, and for people who
simply want to understand how the networking components of their system function.
All the examples in this text are actual, runnable code tested on Unix systems. However, many
non-Unix systems support the sockets API and the examples are largely operating system-
independent, as are the general concepts we present. Virtually every operating system (OS)
provides numerous network-aware applications such as Web browsers, email clients, and file-
sharing servers. We discuss the usual partitioning of these applications into
client
and
server
and write our own small examples of these many times throughout the text.
Presenting this material in a Unix-oriented fashion has the natural side effect of providing
background on Unix itself, and on TCP/IP as well. Where more extensive background may be
interesting, we refer the reader to other texts. Four texts are so commonly mentioned in this
book that we've assigned them the following abbreviations:
APUE:
Advanced Programming in the UNIX Environment
[Stevens 1992]
TCPv1:
TCP/IP Illustrated, Volume 1
[Stevens 1994]
TCPv2:
TCP/IP Illustrated, Volume 2
[Wright and Stevens 1995]

TCPv3:
TCP/IP Illustrated, Volume 3
[Stevens 1996]
TCPv2 contains a high level of detail very closely related to the material in this book, as it
describes and presents the actual 4.4BSD implementation of the network programming
functions for the sockets API (
socket
,
bind
,
connect
, and so on). If one understands the
implementation of a feature, the use of that feature in an application makes more sense.
[ Team LiB ]

[ Team LiB ]



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
"Everyone will want this book because it provides a great mix of practical experience, historical
perspective, and a depth of understanding that only comes from being intimately involved in
the field. I've already enjoyed and learned from reading this book, and surely you will too."
-Sam Leffler
The classic guide to UNIX networking APIs now completely updated!
To build today's highly distributed, networked applications and services, you need deep
mastery of sockets and other key networking APIs. One book delivers comprehensive, start-to-
finish guidance for building robust, high-performance networked systems in any environment:
UNIX Network Programming, Volume 1, Third Edition
.
Building on the legendary work of W. Richard Stevens, this edition has been fully updated by
two leading network programming experts to address today's most crucial standards,
implementations, and techniques. New topics include:
POSIX Single UNIX Specification Version 3
IPv6 APIs (including updated guidance on IPv6/IPv4 interoperability)
The new SCTP transport protocol
IPsec-based Key Management Sockets
FreeBSD 4.8/5.1, Red Hat Linux 9.x, Solaris 9, AIX 5.x, HP-UX, and Mac OS X
implementations
New network program debugging techniques
Source Specific Multicast API, the key enabler for widespread IP multicast deployment
[ Team LiB ]


Changes from the Second Edition
Sockets have been around, more or less in their current form, since the 1980s, and it is a
tribute to their initial design that they have continued to be the network API of choice.
Therefore, it may come as a surprise to learn that quite a bit has changed since the second
edition of this book was published in 1998. The changes we've made to the text are
summarized as follows:
This new edition contains updated information on IPv6, which was only in draft form at
the time of publication of the second edition and has evolved somewhat.
The descriptions of functions and the examples have all been updated to reflect the most
recent POSIX specification (POSIX 1003.1-2001), also known as the
Single Unix
Specification Version 3
.
The coverage of the X/Open Transport Interface (XTI) has been dropped. That API has
fallen out of common use and even the most recent POSIX specification does not bother
to cover it.
The coverage of TCP for transactions (T/TCP) has been dropped.
Three chapters have been added to describe a relatively new transport protocol, SCTP.
This reliable, message-oriented protocol provides multiple streams between endpoints
and transport-level support for multihoming. It was originally designed for transport of
telephony signaling across the Internet, but provides some features that many
applications could take advantage of.
A chapter has been added on
key management sockets
, which may be used with Internet
Protocol Security (IPsec) and other network security services.
The machines used, as well as the versions of their variants of Unix, have all been
updated, and the examples have been updated to reflect how these machines behave. In
many cases, examples were updated because OS vendors fixed bugs or added features,
but as one might expect, we've discovered the occasional new bug here and there. The

machines used for testing the examples in this book were:
Apple Power PC running MacOS/X 10.2.6
HP PA-RISC running HP-UX 11i
IBM Power PC running AIX 5.1
Intel x86 running FreeBSD 4.8
Intel x86 running Linux 2.4.7
Sun SPARC running FreeBSD 5.1
Sun SPARC running Solaris 9
See
Figure 1.16
for details on how these machines were used.
Volume 2 of this
UNIX Network Programming
series, subtitled
Interprocess Communications
,
builds on the material presented here to cover message passing, synchronization, shared
memory, and remote procedure calls.
[ Team LiB ]



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
"Everyone will want this book because it provides a great mix of practical experience, historical
perspective, and a depth of understanding that only comes from being intimately involved in
the field. I've already enjoyed and learned from reading this book, and surely you will too."
-Sam Leffler
The classic guide to UNIX networking APIs now completely updated!
To build today's highly distributed, networked applications and services, you need deep
mastery of sockets and other key networking APIs. One book delivers comprehensive, start-to-
finish guidance for building robust, high-performance networked systems in any environment:
UNIX Network Programming, Volume 1, Third Edition
.
Building on the legendary work of W. Richard Stevens, this edition has been fully updated by
two leading network programming experts to address today's most crucial standards,
implementations, and techniques. New topics include:
POSIX Single UNIX Specification Version 3
IPv6 APIs (including updated guidance on IPv6/IPv4 interoperability)
The new SCTP transport protocol
IPsec-based Key Management Sockets
FreeBSD 4.8/5.1, Red Hat Linux 9.x, Solaris 9, AIX 5.x, HP-UX, and Mac OS X
implementations
New network program debugging techniques

Source Specific Multicast API, the key enabler for widespread IP multicast deployment
[ Team LiB ]

[ Team LiB ]



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
"Everyone will want this book because it provides a great mix of practical experience, historical
perspective, and a depth of understanding that only comes from being intimately involved in
the field. I've already enjoyed and learned from reading this book, and surely you will too."
-Sam Leffler
The classic guide to UNIX networking APIs now completely updated!

To build today's highly distributed, networked applications and services, you need deep
mastery of sockets and other key networking APIs. One book delivers comprehensive, start-to-
finish guidance for building robust, high-performance networked systems in any environment:
UNIX Network Programming, Volume 1, Third Edition
.
Building on the legendary work of W. Richard Stevens, this edition has been fully updated by
two leading network programming experts to address today's most crucial standards,
implementations, and techniques. New topics include:
POSIX Single UNIX Specification Version 3
IPv6 APIs (including updated guidance on IPv6/IPv4 interoperability)
The new SCTP transport protocol
IPsec-based Key Management Sockets
FreeBSD 4.8/5.1, Red Hat Linux 9.x, Solaris 9, AIX 5.x, HP-UX, and Mac OS X
implementations
New network program debugging techniques
Source Specific Multicast API, the key enabler for widespread IP multicast deployment
[ Team LiB ]

Using This Book
This text can be used as either a tutorial on network programming or as a reference for
experienced programmers. When used as a tutorial or for an introductory class on network
programming, the emphasis should be on
Part 2
, "Elementary Sockets" (
Chapters 3
through
11
), followed by whatever additional topics are of interest.
Part 2
covers the basic socket

functions for both TCP and UDP, along with SCTP, I/O multiplexing, socket options, and basic
name and address conversions.
Chapter 1
should be read by all readers, especially
Section 1.4
,
which describes some wrapper functions used throughout the text.
Chapter 2
and perhaps
Appendix A
should be referred to as necessary, depending on the reader's background. Most of
the chapters in
Part 3
, "Advanced Sockets," can be read independently of the others in that
part of the book.
To aid in the use of this book as a reference, a thorough index is provided, along with
summaries on the end papers of where to find detailed descriptions of all the functions and
structures. To help those reading topics in a random order, numerous references to related
topics are provided throughout the text.
[ Team LiB ]

[ Team LiB ]



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
"Everyone will want this book because it provides a great mix of practical experience, historical
perspective, and a depth of understanding that only comes from being intimately involved in
the field. I've already enjoyed and learned from reading this book, and surely you will too."
-Sam Leffler
The classic guide to UNIX networking APIs now completely updated!
To build today's highly distributed, networked applications and services, you need deep
mastery of sockets and other key networking APIs. One book delivers comprehensive, start-to-
finish guidance for building robust, high-performance networked systems in any environment:
UNIX Network Programming, Volume 1, Third Edition
.
Building on the legendary work of W. Richard Stevens, this edition has been fully updated by
two leading network programming experts to address today's most crucial standards,
implementations, and techniques. New topics include:
POSIX Single UNIX Specification Version 3
IPv6 APIs (including updated guidance on IPv6/IPv4 interoperability)
The new SCTP transport protocol
IPsec-based Key Management Sockets

FreeBSD 4.8/5.1, Red Hat Linux 9.x, Solaris 9, AIX 5.x, HP-UX, and Mac OS X
implementations
New network program debugging techniques
Source Specific Multicast API, the key enabler for widespread IP multicast deployment
[ Team LiB ]

Source Code and Errata Availability
The source code for all the examples that appear in the book is available on the Web at
www.unpbook.com
. The best way to learn network programming is to take these programs,
modify them, and enhance them. Actually writing code of this form is the
only
way to reinforce
the concepts and techniques. Numerous exercises are also provided at the end of each
chapter, and most answers are provided in
Appendix E
.
A current errata for the book is also available from the same Web site.
[ Team LiB ]

[ Team LiB ]



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
"Everyone will want this book because it provides a great mix of practical experience, historical
perspective, and a depth of understanding that only comes from being intimately involved in
the field. I've already enjoyed and learned from reading this book, and surely you will too."
-Sam Leffler
The classic guide to UNIX networking APIs now completely updated!
To build today's highly distributed, networked applications and services, you need deep
mastery of sockets and other key networking APIs. One book delivers comprehensive, start-to-
finish guidance for building robust, high-performance networked systems in any environment:
UNIX Network Programming, Volume 1, Third Edition
.
Building on the legendary work of W. Richard Stevens, this edition has been fully updated by
two leading network programming experts to address today's most crucial standards,
implementations, and techniques. New topics include:
POSIX Single UNIX Specification Version 3
IPv6 APIs (including updated guidance on IPv6/IPv4 interoperability)
The new SCTP transport protocol
IPsec-based Key Management Sockets
FreeBSD 4.8/5.1, Red Hat Linux 9.x, Solaris 9, AIX 5.x, HP-UX, and Mac OS X

implementations
New network program debugging techniques
Source Specific Multicast API, the key enabler for widespread IP multicast deployment
[ Team LiB ]

Acknowledgments
The first and second editions of this book were written solely by W. Richard Stevens, who
passed away on September 1, 1999. His books have set a high standard and are largely
regarded as concise, laboriously detailed, and extremely readable works of art. In providing
this revision, the authors struggled to maintain the quality and thorough coverage of Rich's
earlier editions and any shortcomings in this area are entirely the fault of the new authors.
The work of an author is only as good as the support from family members and friends. Bill
Fenner would like to thank his dear wife, Peggy (beach ¼ mile champion), and their
housemate, Christopher Boyd for letting him off all his household chores while working in the
treehouse on this project. Thanks are also due to his friend, Jerry Winner, whose prodding and
encouragement were invaluable. Likewise, Andy Rudoff wants to specifically thank his wife,
Ellen, and girls, Jo and Katie, for their understanding and encouragement throughout this
project. We simply could not have done this without all of you.
Randall Stewart with Cisco Systems, Inc. provided much of the SCTP material and deserves a
special acknowledgment for this much-valued contribution. The coverage of this new and
interesting topic simply would not exist without Randall's work.
The feedback from our reviewers was invaluable for catching errors, pointing out areas that
required more explanation, and suggesting improvements to our text and code examples. The
authors would like to thank: James Carlson, Wu-Chang Feng, Rick Jones, Brian Kernighan,
Sam Leffler, John McCann, Craig Metz, Ian Lance Taylor, David Schwartz, and Gary Wright.
Numerous individuals and their organizations went beyond the normal call of duty to provide
either a loaner system, software, or access to a system, all of which were used to test some of
the examples in the text.
Jessie Haug of IBM Austin provided an AIX system and compilers.
Rick Jones and William Gilliam of Hewlett-Packard provided access to multiple systems

running HP-UX.
The staff at Addison Wesley has been a true pleasure to work with: Noreen Regina, Kathleen
Caren, Dan DePasquale, Anthony Gemellaro, and a very special thanks to our editor, Mary
Franz.
In a trend that Rich Stevens instituted (but contrary to popular fads), we produced camera-
ready copy of the book using the wonderful Groff package written by James Clark, created the
illustrations using the
gpic
program (using many of Gary Wright's macros), produced the
tables using the
gtbl
program, performed all the indexing, and did the final page layout. Dave
Hanson's
loom
program and some scripts by Gary Wright were used to include the source code
in the book. A set of
awk
scripts written by Jon Bentley and Brian Kernighan helped in
producing the final index.
The authors welcome electronic mail from any readers with comments, suggestions, or bug
fixes.
Bill Fenner
Woodside, California
Andrew M. Rudoff
Boulder, Colorado
October 2003
[ Team LiB ]




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
"Everyone will want this book because it provides a great mix of practical experience, historical
perspective, and a depth of understanding that only comes from being intimately involved in
the field. I've already enjoyed and learned from reading this book, and surely you will too."
-Sam Leffler
The classic guide to UNIX networking APIs now completely updated!
To build today's highly distributed, networked applications and services, you need deep
mastery of sockets and other key networking APIs. One book delivers comprehensive, start-to-
finish guidance for building robust, high-performance networked systems in any environment:
UNIX Network Programming, Volume 1, Third Edition
.
Building on the legendary work of W. Richard Stevens, this edition has been fully updated by
two leading network programming experts to address today's most crucial standards,

implementations, and techniques. New topics include:
POSIX Single UNIX Specification Version 3
IPv6 APIs (including updated guidance on IPv6/IPv4 interoperability)
The new SCTP transport protocol
IPsec-based Key Management Sockets
FreeBSD 4.8/5.1, Red Hat Linux 9.x, Solaris 9, AIX 5.x, HP-UX, and Mac OS X
implementations
New network program debugging techniques
Source Specific Multicast API, the key enabler for widespread IP multicast deployment


[ Team LiB ]

[ Team LiB ]



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
"Everyone will want this book because it provides a great mix of practical experience, historical
perspective, and a depth of understanding that only comes from being intimately involved in
the field. I've already enjoyed and learned from reading this book, and surely you will too."
-Sam Leffler
The classic guide to UNIX networking APIs now completely updated!
To build today's highly distributed, networked applications and services, you need deep
mastery of sockets and other key networking APIs. One book delivers comprehensive, start-to-
finish guidance for building robust, high-performance networked systems in any environment:
UNIX Network Programming, Volume 1, Third Edition
.
Building on the legendary work of W. Richard Stevens, this edition has been fully updated by
two leading network programming experts to address today's most crucial standards,
implementations, and techniques. New topics include:
POSIX Single UNIX Specification Version 3
IPv6 APIs (including updated guidance on IPv6/IPv4 interoperability)
The new SCTP transport protocol
IPsec-based Key Management Sockets
FreeBSD 4.8/5.1, Red Hat Linux 9.x, Solaris 9, AIX 5.x, HP-UX, and Mac OS X
implementations
New network program debugging techniques
Source Specific Multicast API, the key enabler for widespread IP multicast deployment
[ Team LiB ]

Part 1: Introduction and TCP/IP
Chapter 1. Introduction

Chapter 2. The Transport Layer: TCP, UDP, and SCTP
[ Team LiB ]

×