sockets vs. STREAMS, also intermachine networking on SV
Kenneth Almquist
ka at june.cs.washington.edu
Wed Feb 15 06:20:50 AEST 1989
> The point is that generic SVR3 does not, by default, contain a usable
> local IPC mechanism for use by a server supporting multiple simultaneous
> connections.
Local IPC was added to AT&T UNIX before the first release of System V.
See msgget(2), msgop(2), and msgctl(2). There is nothing along the
lines of "select" for message queues, but you don't need it. The scheme
works like this:
- When the server starts up, it calls msgget to create a message queue
with a known key. It then reads and processes requests from this queue.
Each request includes a message queue identifier indicating where the
response to the request should be sent.
- When a client wants to start a conversation, it calls msgget to obtain
the message queue identifier of the server's message queue. It then
calls msgget again with a key of IPC_PRIVATE to create a queue to accept
responses. The message queue identifier of this latter queue is included
in all requests to the server.
- When the client is done talking with the server, it should call msgctl
with the IPC_RMID command to remove the message queue.
- Clients which terminate abnormally may leave message queues around, so
you want to remove message queues with a key of IPC_PRIVATE which have
not been used for a while. You can use the ipcs command to identify
these, and either remove them manually or have a daemon remove them
periodically. You can determine when a message queue was last used
using the -t option of ipcs(2) or the IPC_STAT command of msgctl(2).
If you later decide to allow the server to be on a different machine than
the client, you can write a pair of stub processes to forward requests
across the network in a manner that's transparent to the client and the
server.
Kenneth Almquist
More information about the Comp.unix.wizards
mailing list