accept  2J1.Q5

The Windows Sockets accept function accepts a connection on a socket.

SOCKET accept (

    SOCKET s,

 

    struct sockaddr FAR* addr,

 

    int FAR* addrlen

 

   );

 

 

Parameters

s

[in] A descriptor identifying a socket which is listening for connections after a listen.

addr

[out] An optional pointer to a buffer which receives the address of the connecting entity, as known to the communications layer. The exact format of the addr argument is determined by the address family established when the socket was created.

addrlen

[out] An optional pointer to an integer which contains the length of the address addr.

 

Remarks

This routine extracts the first connection on the queue of pending connections on s, creates a new socket and returns a handle to the new socket. The newly created socket has the same properties as s including asynchronous events registered with WSAAsyncSelect or with WSAEventSelect, but not including the listening socket s group ID, if any. If no pending connections are present on the queue, and the socket is not marked as nonblocking, accept blocks the caller until a connection is present. If the socket is marked nonblocking and no pending connections are present on the queue, accept returns an error as described below. The accepted socket cannot be used to accept more connections. The original socket 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 parameter is determined by the address family in which the communication is occurring. The addrlen is a value-result parameter; 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-oriented socket types such as SOCK_STREAM. If addr and/or addrlen are equal to NULL, then no information about the remote address of the accepted socket is returned.

Return Values

If no error occurs, accept returns a value of type SOCKET which is a descriptor for the accepted socket. Otherwise, a value of INVALID_SOCKET is returned, and a specific error code can be retrieved by calling WSAGetLastError.

The integer referred to by addrlen initially contains the amount of space pointed to by addr. On return it will contain the actual length in bytes of the address returned.

Error Codes

WSANOTINITIALISED

A successful WSAStartup must occur before using this FUNCTION.

WSAENETDOWN

The network subsystem has failed.

WSAEFAULT

The addrlen argument is too small or addr is not a valid part of the user address space.

WSAEINTR

The (blocking) call was canceled through WSACancelBlockingCall.

WSAEINPROGRESS

A blocking Windows Sockets 1.1 call is in progress, or the service provider is still processing a callback function.

WSAEINVAL

listen was not invoked prior to accept.

WSAEMFILE

The queue is nonempty upon entry to accept and there are no descriptors available.

WSAENOBUFS

No buffer space is available.

WSAENOTSOCK

The descriptor is not a socket.

WSAEOPNOTSUPP

The referenced socket is not a type that supports connection-oriented service.

WSAEWOULDBLOCK

The socket is marked as nonblocking and no connections are present to be accepted.

 

See Also

bind, connect, listen, select, socket, WSAAsyncSelect, WSAAccept