----------------------------------------------------------------------- This package provides a quick-and-easy means of providing reliable and large-packet communication between processes. It is described further in the man page stream(3) and at length in the document by Don Libes entitled "Packet-Oriented Communications Using a Stream Protocol --or-- Making TCP/IP on Berkeley UNIX a Little More Pleasant to Use", NISTIR 90-4232, January 1990. It is especially nice because initport() does all the hard work of initializing TCP connections, and select_server_stream() does the hard work of connecting processes to each other. If you are running on 4.3BSD, you should add -DBSD4_3 in the Makefile. Otherwise, this will compile for a 4.2BSD system. To install, type make install To test, type make test reader writer (in different window) writer (in yet another window) writer (in yet ...) and so on. reader and writer are two programs that should communicate with each other. Type things into any of the writers and reader will print it out prefaced by the file descriptor the data came in on. Bugs and problems to Don Libes National Bureau of Standards Bldg 220, Rm A-127 Gaithersburg, MD 20899 (301) 975-3535 SYNOPSIS #include #include #include cc [options] [files] sized_io.o stream.o DESCRIPTION This package implements packet or stream IO between a server process and a number of client processes, using the TCP/IP (stream) facilities. A client uses the call: s = initport(PORT_NUMBER(XXX),CLIENT,SOCK_STREAM); s is the server's data socket and is used as a file descriptor in further communication. The port may be specified by name (PORT_NAME("foo")), if it is registered. Similarly, the server uses the following call: s = initport(PORT_NUMBER(XXX),SERVER,SOCK_STREAM); s is the server's connection socket. To receive data or connections, the server calls select_server_stream(). client = select_server_stream(s,&fds); This returns a file descriptor corresponding to a client, when a client has sent a message to the server. It handles initial connections as well as client deaths. s is the server's connection socket that was returned by initport(). fds is an int used by select...() for storing a bit string corresponding to client sockets. Initialize it to 0, and don't mess with it after that. To use the file descriptors in a stream-oriented manner, use read() and write(). To use the file descriptors in a packet-oriented manner, use sized_read() and sized_write(). The sized...() calls read and write one packet at a time, while packet boundaries are ignored in read() and write(). cc = sized_read(fd,buffer,maxsize) cc = sized_write(fd,buffer,size) The arguments for sized_read() and sized_write() are very similar to read() and write(). The only difference is that in sized_read(), maxsize is the maximum size of an acceptable packet. -----------------------------------------------------------------------