accept

Hurricane Electric Internet Services: Accounts starting at $9.95/month
Hurricane Electric Internet Services

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(2), bound to an address with bind(2), and  is  lis-
       tening  for  connections  after  a  listen(2).  The accept
       argument 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  informa-
       tion, 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

       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.


HISTORY

       The accept function appeared in BSD 4.2.


SEE ALSO

       bind(2), connect(2), listen(2), select(2), socket(2)
Hurricane Electric Internet Services: Accounts starting at $9.95/month
Hurricane Electric Internet Services
Copyright (C) 1998 Hurricane Electric. All Rights Reserved.