The process of passing the socket is accomplished in the following
way:
- After creating a subtask, the server main task issues the GIVESOCKET
call to pass the socket to the subtask. If the subtask’s address space
name and subtask ID are specified in the GIVESOCKET call, (as with CICS®) only a subtask with a matching
address space and subtask ID can take the socket. If this field is
set to blanks, (as with IMS™)
any MVS™ address space requesting
a socket can take this socket.
- The server main task then passes the socket descriptor and concurrent
server’s ID to the subtask using some form of commonly addressable
technique such as the IMS Message
Queue.
- The concurrent server issues the SELECT call to determine when
the GIVESOCKET has successfully completed.
- The subtask calls TAKESOCKET with the concurrent server’s ID and
socket descriptor and uses the resulting socket descriptor for communication
with the client.
- When the GIVESOCKET has successfully completed, the concurrent
server issues the CLOSE call to complete the handoff.
An example of a concurrent server is the IMS Listener. It is described in How to customize and operate the IMS Listener. Figure 2 shows
a concurrent server.