Reformatting page.  Please Wait... done


Sockets Library Functions                         ACCEPT(3SOCKET)


NAME
     accept - accept a connection on a socket

SYNOPSIS
     cc [ flag ... ] file ... -lsocket  -lnsl  [ library ... ]
     #include <sys/types.h>
     #include <sys/socket.h>

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

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


DESCRIPTION
     The argument s is  a  socket  that  has  been  created  with
     socket(3SOCKET)  and bound to an address with bind(3SOCKET),
     and that is  listening  for  connections  after  a  call  to
     listen(3SOCKET).  The  accept()  function 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  connec-
     tions  are present on the queue and the socket is not marked
     as non-blocking, accept() blocks the caller until a  connec-
     tion 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.  The accept() function
     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  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 communi-
     cation occurs.


     The argument 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.


     The accept() function is used with  connection-based  socket
     types, currently with SOCK_STREAM.


Illumos             Last change: Apr 19, 2013                   1


Sockets Library Functions                         ACCEPT(3SOCKET)


     The  accept4()  function  allows  flags  that  control   the
     behavior  of a successfully accepted socket.  If flags is 0,
     accept4() acts identically to accept(). Values for flags are
     constructed by a bitwise-inclusive-OR of flags from the fol-
     lowing list, defined in <sys/socketvar.h>.

     SOCK_CLOEXEC
                 The accepted socket  will  have  the  FD_CLOEXEC
                 flag  set  as if fcntl() was called on it.  This
                 flag is set before the socket is passed  to  the
                 caller  thus avoiding the race condition between
                 accept() and fcntl().  See, O_CLOEXEC in open(2)
                 for more details.


     SOCK_NDELAY
                 The accepted socket will have the O_NDELAY  flag
                 set  as  if fcntl() was called on it.  This sets
                 the socket into non-blocking mode.  See O_NDELAY
                 in fcntl.h(3HEAD) for more details.


     SOCK_NONBLOCK
                 The accepted socket  will  have  the  O_NONBLOCK
                 flag  set  as if fcntl() was called on it.  This
                 sets the socket into non-blocking  mode  (POSIX;
                 see    standards(5)).     See    O_NONBLOCK   in
                 fcntl.h(3HEAD) for more details.


     It is possible to select(3C) or poll(2)  a  socket  for  the
     purpose  of  an  accept()  by  selecting or polling it for a
     read. However, this will only indicate when a connect  indi-
     cation is pending; it is still necessary to call accept().

RETURN VALUES
     The accept() function returns -1 on error. If  it  succeeds,
     it  returns  a non-negative integer that is a descriptor for
     the accepted socket.

ERRORS
     accept() and accept4() will fail if:

     EBADF
                     The descriptor is invalid.


     ECONNABORTED
                     The  remote  side  aborted  the   connection
                     before the accept() operation completed.


Illumos             Last change: Apr 19, 2013                   2


Sockets Library Functions                         ACCEPT(3SOCKET)


     EFAULT
                     The addr parameter or the addrlen  parameter
                     is invalid.


     EINTR
                     The accept() attempt was interrupted by  the
                     delivery of a signal.


     EMFILE
                     The per-process descriptor table is full.


     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.


     ENOTSOCK
                     The descriptor does not reference a socket.


     EOPNOTSUPP
                     The  referenced  socket  is  not   of   type
                     SOCK_STREAM.


     EPROTO
                     A protocol error has occurred; for  example,
                     the STREAMS protocol stack has not been ini-
                     tialized or the connection has already  been
                     released.


     EWOULDBLOCK
                     The socket is marked as non-blocking and  no
                     connections are present to be accepted.


Illumos             Last change: Apr 19, 2013                   3


Sockets Library Functions                         ACCEPT(3SOCKET)


     Additionally, accept4() will fail if:

     EINVAL
                     The flags value is invalid. The flags  argu-
                     ment can only be the bitwise inclusive-OR of
                     SOCK_CLOEXEC,       SOCK_NONBLOCK,       and
                     SOCK_NDELAY.


ATTRIBUTES
     See attributes(5) for descriptions of the  following  attri-
     butes:


     __________________________________
    | ATTRIBUTE TYPE|  ATTRIBUTE VALUE|
    |_______________|_________________|
    | MT-Level      |  Safe           |
    |_______________|_________________|


SEE ALSO
     poll(2)bind(3SOCKET),  connect(3SOCKET),  listen(3SOCKET),
     select(3C),  socket.h(3HEAD)socket(3SOCKET)netconfig(4),
     attributes(5)fcntl.h(3HEAD)fcntl(2)standards(5)


Illumos             Last change: Apr 19, 2013                   4