accept(3N) accept(3N)
NAME
accept - accept a connection on a socket
SYNOPSIS
cc [options] file -lsocket -lnsl
#include <sys/types.h>
#include <sys/socket.h>
int accept(int s, struct sockaddr *addr, size_t *addrlen);
DESCRIPTION
The argument s is a socket that has been created with socket
and bound to an address with bind, and that is listening for
connections after a call to listen. accept extracts the first
connection on the queue of pending connections, creates a new
socket with the properties of s, and allocates 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 as non-blocking and no
pending connections are present on the queue, accept returns
an error as described below. accept uses the netconfig file
to determine the STREAMS device file name associated with s.
This is the device on which the connect indication will be
accepted. The accepted socket, ns, is used to read and write
data to and from the socket that connected to ns; 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 SOCK_STREAM.
It is possible to select a socket for the purpose of an accept
by selecting it for read. However, this will only indicate
when a connect indication is pending; it is still necessary to
call accept.
Copyright 1994 Novell, Inc. Page 1
accept(3N) accept(3N)
Files
/usr/lib/locale/locale/LC_MESSAGES/uxnsl
Return Values
accept returns -1 on error. If it succeeds, it returns a
non-negative integer that is a descriptor for the accepted
socket.
Errors
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
SOCK_STREAM.
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 complete the operation.
ENOSR There were insufficient STREAMS resources
available to complete the operation.
REFERENCES
bind(3N), connect(3N), listen(3N), netconfig(4), socket(3N)
NOTICES
The type of address structure passed to accept depends on the
address family. UNIX domain sockets (address family AF_UNIX)
require a sockaddr_un structure as defined in sys/un.h;
Internet domain sockets (address family AF_INET) require a
sockaddr_in structure as defined in netinet/in.h. Other
address families may require other structures. Use the
Copyright 1994 Novell, Inc. Page 2
accept(3N) accept(3N)
structure appropriate to the address family; cast the
structure address to a generic caddr_t in the call to accept
and pass the size of the structure in the addrlen argument.
Copyright 1994 Novell, Inc. Page 3