When a server receives a connection request, it can complete the connection by accepting the request. Use the function accept
to do this.
A socket that has been established as a server can accept connection requests from multiple clients. The server's original socket does not become part of the connection; instead, accept
makes a new socket which participates in the connection. accept
returns the descriptor for this socket. The server's original socket remains available for listening for further connection requests.
The number of pending connection requests on a server socket is finite. If connection requests arrive from clients faster than the server can act upon them, the queue can fill up and additional requests are refused with a ECONNREFUSED
error. You can specify the maximum length of this queue as an argument to the listen
function, although the system may also impose its own internal limit on the length of this queue.
The accept
function waits if there are no connections pending, unless the socket socket has nonblocking mode set. (You can use select
to wait for a pending connection, with a nonblocking socket.) See File Status Flags, for information about nonblocking mode.
The addr and length-ptr arguments are used to return information about the name of the client socket that initiated the connection. See Socket Addresses, for information about the format of the information.
Accepting a connection does not make socket part of the connection. Instead, it creates a new socket which becomes connected. The normal return value of accept
is the file descriptor for the new socket.
After accept
, the original socket socket remains open and unconnected, and continues listening until you close it. You can accept further connections with socket by calling accept
again.
If an error occurs, accept
returns -1
. The following errno
error conditions are defined for this function:
EBADF
ENOTSOCK
EOPNOTSUPP
EWOULDBLOCK
The accept
function is not allowed for sockets using connectionless communication styles.