ACCEPT(2) UNIX Programmer's Manual ACCEPT(2) NAME accept - accept a connection on a socket SYNOPSIS #include <sys/types.h> #include <sys/socket.h> ns = accept(s, addr, addrlen) int ns, s; struct sockaddr *addr; int *addrlen; DESCRIPTION The argument s is a socket that has been created with socket(2), bound to an address with bind(2), and is listen- ing for connections after a listen(2). Accept extracts the first connection on the queue of pending connections, creates a new socket with the same properties of s and allo- cates a new file descriptor, ns, for the socket. If no pending connections are present on the queue, and the socket is not marked as non-blocking, accept blocks the caller until a connection is present. If the socket is marked non-blocking and no pending connections are present on the queue, accept returns an error as described below. The accepted socket, ns, may not be used to accept more connec- tions. The original socket s remains open. The argument addr is a result parameter that is filled in with the address of the connecting entity, as known to the communications layer. The exact format of the addr parame- ter is determined by the domain in which the communication is occurring. The addrlen is a value-result parameter; it should initially contain the amount of space pointed to by addr; on return it will contain the actual length (in bytes) of the address returned. This call is used with connection-based socket types, currently with SOCK_STREAM. It is possible to select(2) a socket for the purposes of doing an accept by selecting it for read. RETURN VALUE The call returns -1 on error. If it succeeds, it returns a non-negative integer that is a descriptor for the accepted socket. ERRORS The accept will fail if: [EBADF] The descriptor is invalid. [ENOTSOCK] The descriptor references a file, not a socket. Printed 11/26/99 May 22, 1986 1 ACCEPT(2) UNIX Programmer's Manual ACCEPT(2) [EOPNOTSUPP] The referenced socket is not of type SOCK_STREAM. [EFAULT] The addr parameter is not in a writable part of the user address space. [EWOULDBLOCK] The socket is marked non-blocking and no connections are present to be accepted. SEE ALSO bind(2), connect(2), listen(2), select(2), socket(2) Printed 11/26/99 May 22, 1986 2