xref: /mOS-networking-stack/docs/man/mtcp_accept (revision 91df013f)
mtcp_accept 3 2017-02-01 "Linux" "mOS Library Functions Manual"
NAME
mtcp_accept - accept a connection on an mTCP socket
SYNOPSIS
#include <mtcp_api.h> "int mtcp_accept(mctx_t " mctx ", int " sockid ", struct sockaddr *" addr ", socklen_t *" addrlen );
DESCRIPTION
mtcp_accept () function is used to accept an incoming connection request from a TCP client. During a successful mtcp_accept() call, the mTCP stack extracts the first connection request from the listening queue of pending connections associated with the passive socket ID "sockid." It then creates a new socket and returns its corresponding socket ID to the user. The newly created socket (that is returned) can be used to communicate with the TCP client while the original socket "sockid" is unaffected by this call. The passive socket represented by the "sockid" socket descriptor should be bound to a local address using "mtcp_bind()" function and should be listening for connections by calling "mtcp_listen()" function before it can be used for accepting new connection requests. The "addr" argument is a pointer to "sockaddr" structure that gets filled up with the address of the peer node while the "addrlen" field contains the size of the peer address. If the "addr" argument is NULL, nothing is filled in and as a result, "addrlen" is not used and should also be NULL. If no pending connections are present on the queue, mtcp_accept() fails with error "EAGAIN" errno. In order to be notified of incoming connections on a socket, the user can use "mtcp_epoll_wait()" function call. A readable event is delivered when a new connection arrives on the listening socket. An mtcp_accept () call takes an additional argument named "mctx" that represents the per-core mTCP context in an application (see mtcp_create_context() for details). """""""""""""""""""""""""""""""""""""""""""""""""""""""""""
RETURN VALUE
Returns an mTCP descriptor ID of the newly created active mTCP socket; -1 on failure. In case of failure, "errno" is set appropriately. """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
ERRORS

10 "EAGAIN" No connections requests are available at the moment.

10 "EBADF" "sockid" is not a valid socket descriptor for accepting connections.

10 "EINTR" The application thread is scheduled to shut down.

10 "EINVAL" The socket referred to by the "sockid" argument is not a listening (passive) socket.

10 "ENFILE" New active socket could not be created as the mTCP core is out of socket descriptors at the moment. """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"""".SH CONFORMING TO
""""POSIX.1-2001.
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

NOTES
For performance reasons, it is recommended that the "same" thread (represented by "mctx" argument) that spawns the active socket via mtcp_accept() should handle operations (mtcp_read(), mtcp_write(), and mtcp_getsockopt()) on that socket for the entire lifetime of the connection (till mtcp_close()). """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
AUTHORS
mTCP development team <[email protected]> """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
SEE ALSO
mtcp_bind (), mtcp_listen (), mtcp_socket (), mtcp_connect (), mtcp_read (), mtcp_write () """""""""""""""""""""""""""""""""""""""""""""""""""""
COLOPHON
This page is part of mOS release 0.3 "docs" section. A description of the project, and information about reporting bugs, can be found at \%http://mos.kaist.edu/. """""""""""""""""""""""""""""""""""""""""""""""""""""