File: *manpages*,  Node: accept,  Up: (dir)



ACCEPT(2)           Linux Programmer's Manual           ACCEPT(2)

NAME
       accept - accept a connection on a socket

SYNOPSIS
       #include <sys/types.h>

       #include <sys/socket.h>

       int   accept(int   s,  struct  sockaddr  *addr,  socklen_t
       *addrlen);

DESCRIPTION
       The argument s is a socket  that  has  been  created  with
       socket(2),  bound  to an address with bind(2), and is lis
       tening for connections  after  a  listen(2).   The  accept
       function  extracts  the  first  connection  request on the
       queue of pending connections, creates a  new  socket  with
       the same properties of s and allocates a new file descrip
       tor for the socket.  If no pending connections are present
       on  the  queue, and the socket is not marked as non-block
       ing, accept blocks the caller until a connection  is  pre
       sent.  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 may not be
       used to accept more connections.  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 param
       eter is determined by the domain in which  the  communica
       tion  is occurring.  The addrlen is a value-result parame
       ter; 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.

       For  certain protocols which require an explicit confirma
       tion, such as ISO or DATAKIT, accept can be thought of  as
       merely  dequeuing  the  next  connection  request  and not
       implying confirmation.  Confirmation can be implied  by  a
       normal  read  or  write  on  the  new file descriptor, and
       rejection can be implied by closing the new socket.

       One can obtain user connection request data  without  con
       firming  the  connection by issuing a recvmsg(2) call with
       an msg_iovlen of 0 and a non-zero  msg_controllen,  or  by
       issuing  a getsockopt(2) request.  Similarly, one can pro
       vide user connection rejection information  by  issuing  a
       sendmsg(2)   call   with   providing   only   the  control

BSD Man Page               24 July 1993                         1

ACCEPT(2)           Linux Programmer's Manual           ACCEPT(2)

       information, or by calling setsockopt(2).

RETURN VALUES
       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 BSD man page documents five possible error returns.

       EBADF  The descriptor is invalid.

       ENOTSOCK
              The descriptor references a file, not a socket.

       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 connec
              tions are present to be accepted.

       Various Linux kernels can return various other errors such
       as   EMFILE,   EINVAL,   ENOSR,  ENOBUFS,  EAGAIN,  EPERM,
       ECONNABORTED, ESOCKTNOSUPPORT, EPROTONOSUPPORT, ETIMEDOUT,
       ERESTARTSYS.

CONFORMING TO
       SVr4,  4.4BSD  (the  accept function first appeared in BSD
       4.2).  IRIX documents additional errors EMFILE and ENFILE.
       Solaris documents additional errors EINTR, ENODEV, ENOMEM,
       ENOSR and EPROTO.

SEE ALSO
       bind(2), connect(2), listen(2), select(2), socket(2)

BSD Man Page               24 July 1993                         2

