# mtcp_socket

NAME
SYNOPSIS
DESCRIPTION
RETURN VALUE
ERRORS
AUTHORS
SEE ALSO
COLOPHON

## NAME

mtcp_socket − instantiate an mTCP endpoint for communication

## SYNOPSIS

#include <mtcp_api.h>

int mtcp_socket(mctx_t mctx, int domain, int type, int protocol);

## DESCRIPTION

mtcp_socket() can be used to create a communication endpoint for mTCP-based network connection. In many ways, it behaves similar to a BSD socket. An mtcp_socket() call takes an additional argument named mctx that represents the per-core mTCP context in an application (see mtcp_create_context() for details).

The domain argument is used to specify a communication domain; in mTCP, the only available protocol family for the domain is AF_INET which represents IPv4 Internet protocol.

The socket type denotes the communication semantics and the only available type in mTCP at the moment is SOCK_STREAM which represents TCP’s reliable, sequenced, full-duplex communication between two endpoints.

The protocol argument represents the specific protocol ID to be used with the socket. mTCP assumes this argument to be 0 (since it only supports single-protocol sockets).

Sockets of type SOCK_STREAM are full-duplex bytestreams. A stream socket must be in ESTABLISHED TCP state before data can be sent or received on it. A connection to another peer endpoint can be created with an mtcp_connect() call. Once connected, data may be exchanged using mtcp_read() and mtcp_write() calls. When a session needs to be terminated, mtcp_close() can be called. Socket operations can be manipulated using socket level options via mtcp_setsockopt() and mtcp_getsockopt() function calls. mTCP sockets run in non-blocking mode by default.

## RETURN VALUE

Returns an mTCP descriptor ID on success; -1 on failure. In case of failure, errno is set appropriately. Please note that each mTCP context (referred to by mctx ) creates its own dedicated pool of sockets.

## ERRORS

| EAFNOSUPPORT |  | domain is not supported.
| EINVAL |  | The socket type is invalid.
| ENFILE |  | No socket descriptor is available in the pool at the moment.

## AUTHORS

mTCP development team <mtcp-user@list.ndsl.kaist.edu>

## SEE ALSO

mtcp_bind(), mtcp_listen(), mtcp_accept(), mtcp_connect(), mtcp_read(), mtcp_write()

## COLOPHON

This page is part of mTCP release 3.0 docs section. A description of the project, and information about reporting bugs, can be found at http://shader.kaist.edu/mtcp/.