accept(3N) accept(3N)
NAME
accept - accept a connection on a socket
SYNOPSIS
#include <sys/types.h>
#include <sys/socket.h>
int accept(int s, struct sockaddr *addr, int *addrlen);
DESCRIPTION
The argument s is a socket that has been created with socket(3N) and
bound to an address with bind(3N), and that is listening for connec-
tions after a call to listen(3N). accept() extracts the first connec-
tion on the queue of pending connections, creates a new socket with
the properties of s, and allocates a new file descriptor 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 as non-blocking and
no pending connections are present on the queue, accept() returns an
error as described below. accept() uses the netconfig(4) file to
determine the STREAMS device file name associated with s. This is the
device on which the connect indication will be accepted. The new
socket created by accept() is used to exchange data; it is not used to
accept more connections. The original socket (s) remains open for
accepting further connections.
The argument addr is a result parameter that is filled in with the
address of the connecting entity as it is known to the communications
layer. The exact format of the addr parameter is determined by the
domain in which the communication occurs.
addrlen is a value-result parameter. Initially, it contains the amount
of space pointed to by addr; on return it contains the length in bytes
of the address returned.
accept() is used with connection-based socket types, currently with
SOCKSTREAM.
It is possible to use select(3C) to determine whether there is a con-
nection indication for the socket, and then to perform an accept()
call. If a "read" event is indicated, this means that a connection
indication is pending and can be accepted with accept().
RETURN VALUE
accept() returns -1 on error. If it succeeds, it returns a non-
negative integer that is a descriptor for the accepted socket.
Page 1 Reliant UNIX 5.44 Printed 11/98
accept(3N) accept(3N)
DIAGNOSTICS
accept() will fail if:
EBADF The descriptor is invalid.
ENOTSOCK The descriptor does not reference a socket.
EOPNOTSUPP The referenced socket is not of type SOCKSTREAM.
EWOULDBLOCK The socket is marked as non-blocking and no connections
are present to be accepted.
EPROTO A protocol error has occurred; for example, the STREAMS
protocol stack has not been initialized.
ENODEV The protocol family and type corresponding to s could
not be found in the netconfig file.
ENOMEM There was insufficient user memory available to com-
plete the operation.
ENOSR There were insufficient STREAMS resources available to
complete the operation.
SEE ALSO
bind(3N), connect(3N), listen(3N), socket(3N), netconfig(4).
Page 2 Reliant UNIX 5.44 Printed 11/98