	This directory tree comprises the source code from
the book "UNIX Network Programming" by W. Richard Stevens,
published by Prentice Hall, 1990.

---------------------------------------------------------------------
	LIMITS OF LIABILITY AND DISCLAIMER OF WARRANTY

The author and publisher of the book "UNIX Network Programming"
have used their best efforts in preparing this software.
These efforts include the development, research, and testing
of the theories and programs to determine their effectiveness.
The author and publisher make no warranty of any kind, express
or implied, with regard to these programs or the documentation
contained in the book. The author and publisher shall not be
liable in any event for incidental or consequential damages in
connection with, or arising out of, the furnishing, performance,
or use of these programs.
---------------------------------------------------------------------

	As stated in the Preface of the book, the source code was
tested under 4.3BSD on a VAX and AT&T's System V/386 Release 3.2
on a Compaq 386/20.  There may be some comments and Makefile rules
for Xenix since I started porting some of the software to Xenix.
However, I found the existing Xenix socket libraries so poor that
I never finished.

	To start, check the files "systype.sh" and "systype.h"
in either the "lib" or "lib.s5" directory.  These may have to
be modified for your system.  Next, do a "make" in either of
these directories to make the library "libnet.a".  This library
is required to make most of the other programs (minimally because
the error functions - err_XXX() - are in this library and these
error functions are used by almost every program).

	Note that there are a lot of links between files in
different directories.  For example, the directories "fd" and "fd.s5"
both use the same Makefile and main programs.  Only the files
"sendfile.c" and "recvfile.c" in these directories are different
between 4.3BSD and System V.

	The directories are as follows:

asyncio		The asynchronous I/O example from Section 6.12.

fd		The file descriptor passing example for 4.3BSD from
		Section 6.10.

fd.s5		The file descriptor passing example for System V
		from Section 7.10.

inettime	The Internet time and daytime clients from Section 10.2.

ipc		The IPC examples from Chapter 3.

lib		The library of common functions for 4.3BSD.  These functions
		come from all over the book.  Specifically:

	lib/daemon.c		daemon_start() function - Sec. 2.6.
	lib/dgsendrecv.c	Reliable message send/receive - Sec. 8.4.
	lib/error.c		Error handling - Appendix A.3.
	lib/hosterror.c		Sec. A.3.
	lib/idpopen.c		Sec. 8.3.
	lib/lock.c		Lock functions for lpr/seqno.c - Sec. 13.3.
	lib/netdefs.h		Used by lib/XXXopen.c and tftp/netXXX.c.
	lib/nspipe.c		Named stream pipe function - Sec. 6.9.
	lib/pty.c		Pseudo tty routines - Sec. 15.4.
	lib/readline.c		Sec. 6.6.
	lib/readn.c		Sec. 6.6.
	lib/rresvport.c		(Not in book; needed for WIN/TCP)
	lib/rtt.c		Round-trip timing functions - Sec. 8.4.
	lib/sigchild.c		daemon_start() SIGCLD handler - Sec. 2.6.
	lib/spipe.c		Stream pipe function - Sec. 6.9.
	lib/sppopen.c		Sec. 8.3.
	lib/tcpopen.c		Sec. 8.3.
	lib/timer.c		Timing functions used in TFTP - App. A.4.
	lib/ttymode.c		Copy terminal mode - Sec. 15.5.
	lib/ttyraw.c		Set terminal raw mode - Sec. 15.5.
	lib/udpopen.c		Sec. 8.3.
	lib/writen.c		Sec. 6.6.

lib.s5		The library of common functions for System V.
		See the list above for the "lib" directory.  The differences
		are: idpopen.c, sppopen.c, and sigchild.c aren't in "lib.s5"
		and "lib.s5" contains semaph.c (the simpler semaphore
		operations - Sec. 3.10).

lock		The record locking and file locking functions from
		Section 3.2.

lpr		The 4.3BSD line printer client - Section 13.3.

net		The simple client-server examples from Section 6.6.
		Also the socket option example from Section 6.11 and
		the host entry example from Section 8.2.

net.s5		The simple client-server examples from Section 7.6.
		Also contains a program to print all the stream modules
		on a given stream, and a program to print all the
		TLI "struct t_info" values for your implementation.

nspipe.s5	The named stream pipe example from Section 7.9.

ping		The 4.3BSD Internet ping program from Section 11.2.

rcmd		The rcmd() function and its rshd server from
		Section 14.3.  Also the ruserok() function from
		Section 9.2.

record		The recording example from Sections 15.3 - 15.6.

record.s5	The System V version of the recording example.

reliable	The reliable message client and server from Section 8.4.

rlogin		The 4.3BSD rlogin client and rlogind server from
		Sections 15.11 and 15.12.

rmt		The remote tape server from Section 16.4.

rpc.courier/timedate	The Xerox Courier RPC example from Section 18.4.
			Note that the Makefile will certainly have to be
			modified, depending where you have installed the
			Courier compiler, library, and include files.

rpc.sun/timedate	The Sun RPC example from Section 18.3.
			Note that the Makefile will certainly have to be
			modified, depending where you have installed the
			Sun RPC compiler and library.

select		The higher precision timer, using the select system
		call, from Section 6.13.

tftp		The TFTP client and server from Chapter 12.

xnsecho		The XNS IDP echo client from Section 11.3.

	Please send me any bug fixes, comments, suggestions, etc.

		Richard Stevens
		Health Systems International, New Haven, CT
		   stevens@hsi.com
	           ... { uunet | yale } ! hsi ! stevens
