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.
|