A server issues the ACCEPT call to accept a connection
request from a client. The call points to a socket that was previously
created with a SOCKET call and marked by a LISTEN call.
The ACCEPT call is a blocking call. When issued, the ACCEPT
call:
- Accepts the first connection on a queue of pending connections.
- Creates a new socket with the same properties as s, and returns
its descriptor in RETCODE. The original sockets remain available to
the calling program to accept more connection requests.
- The address of the client is returned in NAME for use by subsequent
server calls.
Notes: - The blocking or nonblocking mode of a socket affects the operation
of certain commands. The default is blocking; nonblocking mode can
be established by use of the FCNTL and IOCTL calls. When a socket
is in blocking mode, an I/O call waits for the completion of certain
events. For example, a READ call will block until the buffer contains
input data. When an I/O call is issued:
- If the socket is blocking, program processing is suspended until
the event completes.
- If the socket is nonblocking, program processing continues.
- If the queue has no pending connection requests, ACCEPT blocks
the socket unless the socket is in nonblocking mode. The socket can
be set to nonblocking by calling FCNTL or IOCTL.
- When multiple socket calls are issued, a SELECT call can be issued
prior to the ACCEPT to ensure that a connection request is pending.
Using this technique ensures that subsequent ACCEPT calls will not
block.
- TCP⁄IP does not provide a function for screening clients. As a result,
it is up to the application program to control which connection requests
it accepts, but it can close a connection immediately after discovering
the identity of the client.
The following requirements apply to this call:
Authorization: |
Supervisor state or problem state, any PSW key. |
Dispatchable unit mode: |
Task. |
Cross memory mode: |
PASN = HASN. |
Amode: |
31-bit or 24-bit.
|
ASC mode: |
Primary address space control (ASC) mode. |
Interrupt status: |
Enabled for interrupts. |
Locks: |
Unlocked. |
Control parameters: |
All parameters must be addressable by the caller
and in the primary address space. |
Figure 1 shows an example of
ACCEPT call instructions.
Figure 1. ACCEPT call instructions
example WORKING-STORAGE SECTION.
01 SOC-FUNCTION PIC X(16) VALUE IS 'ACCEPT'.
01 S PIC 9(4) BINARY.
* IPv4 socket address structure.
01 NAME.
03 FAMILY PIC 9(4) BINARY.
03 PORT PIC 9(4) BINARY.
03 IP-ADDRESS PIC 9(8) BINARY.
03 RESERVED PIC X(8).
* IPv6 socket address structure.
01 NAME.
03 FAMILY PIC 9(4) BINARY.
03 PORT PIC 9(4) BINARY.
03 FLOWINFO PIC 9(8) BINARY.
03 IP-ADDRESS.
10 FILLER PIC 9(16) BINARY.
10 FILLER PIC 9(16) BINARY.
03 SCOPE-ID PIC X(8) BINARY.
01 ERRNO PIC 9(8) BINARY.
01 RETCODE PIC S9(8) BINARY.
PROCEDURE DIVISION.
CALL 'EZASOKET' USING SOC-FUNCTION S NAME ERRNO RETCODE.