Server processes that are included into the file/device/server name space are ``system objects'' in the sense that they are not subprocesses of any of any ``user'' process. Consequently, a server cannot link one of its I/O ports to a new client process by calling Connect, or by having its parent process call Connect. Nor can a server sensibly call Open.
Consequently, an additional ``non-classical'' system call is needed:
Make-available (io-port, in-len, in-buf)
This call opens an I/O port without actually establishing a complete point-to-point IPC link. Once made ``available'', an I/O port is regarded as in ``midst I/O'' and an I/O operation can be completed on it by calling Complete-IO (either directly, or by specifying the ``any port'' value).
The completion of an I/O operation on an available port happens only when a server becomes the target of a call to Open by a prospective client. When this happens, the operating system chooses one of the server's available I/O ports and sends an ``application to become a client'' message to the port.
Receipt of an ``application'' message at an available port will make it possible for the server to complete an I/O operation on the port, and to receive the application in the process. The message (which can be trusted, since it comes from the OS and not from the client) fully identifies the client, the current privileges of the client, and the operations requested by the client. The server can then decide whether or not to accept the client, and indicate this by sending a specially formatted message via the port from which the application was received. The server's reply is intercepted by the operating system and used to decide whether or not the client's call to Open should be successful.
Note that, following an acceptance of the client by the server, the server is in ``midst I/O'' with a receive buffer set up by the call to IO that sent the acceptance message. Thus, no ``initializing'' I/O operation by the client is needed when the server is a system object rather than a ``user'' process. In other words, much of the agonizing done in section 5 need never concern the average programmer.
Prof Herman Venter