Blame docs/src/tcp.rst

Packit b5b901
Packit b5b901
.. _tcp:
Packit b5b901
Packit b5b901
:c:type:`uv_tcp_t` --- TCP handle
Packit b5b901
=================================
Packit b5b901
Packit b5b901
TCP handles are used to represent both TCP streams and servers.
Packit b5b901
Packit b5b901
:c:type:`uv_tcp_t` is a 'subclass' of :c:type:`uv_stream_t`.
Packit b5b901
Packit b5b901
Packit b5b901
Data types
Packit b5b901
----------
Packit b5b901
Packit b5b901
.. c:type:: uv_tcp_t
Packit b5b901
Packit b5b901
    TCP handle type.
Packit b5b901
Packit b5b901
Packit b5b901
Public members
Packit b5b901
^^^^^^^^^^^^^^
Packit b5b901
Packit b5b901
N/A
Packit b5b901
Packit b5b901
.. seealso:: The :c:type:`uv_stream_t` members also apply.
Packit b5b901
Packit b5b901
Packit b5b901
API
Packit b5b901
---
Packit b5b901
Packit b5b901
.. c:function:: int uv_tcp_init(uv_loop_t* loop, uv_tcp_t* handle)
Packit b5b901
Packit b5b901
    Initialize the handle. No socket is created as of yet.
Packit b5b901
Packit b5b901
.. c:function:: int uv_tcp_init_ex(uv_loop_t* loop, uv_tcp_t* handle, unsigned int flags)
Packit b5b901
Packit b5b901
    Initialize the handle with the specified flags. At the moment only the lower 8 bits
Packit b5b901
    of the `flags` parameter are used as the socket domain. A socket will be created
Packit b5b901
    for the given domain. If the specified domain is ``AF_UNSPEC`` no socket is created,
Packit b5b901
    just like :c:func:`uv_tcp_init`.
Packit b5b901
Packit b5b901
    .. versionadded:: 1.7.0
Packit b5b901
Packit b5b901
.. c:function:: int uv_tcp_open(uv_tcp_t* handle, uv_os_sock_t sock)
Packit b5b901
Packit b5b901
    Open an existing file descriptor or SOCKET as a TCP handle.
Packit b5b901
Packit b5b901
    .. versionchanged:: 1.2.1 the file descriptor is set to non-blocking mode.
Packit b5b901
Packit b5b901
    .. note::
Packit b5b901
        The passed file descriptor or SOCKET is not checked for its type, but
Packit b5b901
        it's required that it represents a valid stream socket.
Packit b5b901
Packit b5b901
.. c:function:: int uv_tcp_nodelay(uv_tcp_t* handle, int enable)
Packit b5b901
Packit b5b901
    Enable `TCP_NODELAY`, which disables Nagle's algorithm.
Packit b5b901
Packit b5b901
.. c:function:: int uv_tcp_keepalive(uv_tcp_t* handle, int enable, unsigned int delay)
Packit b5b901
Packit b5b901
    Enable / disable TCP keep-alive. `delay` is the initial delay in seconds,
Packit b5b901
    ignored when `enable` is zero.
Packit b5b901
Packit Service e08953
    After `delay` has been reached, 10 successive probes, each spaced 1 second
Packit Service e08953
    from the previous one, will still happen. If the connection is still lost
Packit Service e08953
    at the end of this procedure, then the handle is destroyed with a
Packit Service e08953
    ``UV_ETIMEDOUT`` error passed to the corresponding callback.
Packit Service e08953
Packit b5b901
.. c:function:: int uv_tcp_simultaneous_accepts(uv_tcp_t* handle, int enable)
Packit b5b901
Packit b5b901
    Enable / disable simultaneous asynchronous accept requests that are
Packit b5b901
    queued by the operating system when listening for new TCP connections.
Packit b5b901
Packit b5b901
    This setting is used to tune a TCP server for the desired performance.
Packit b5b901
    Having simultaneous accepts can significantly improve the rate of accepting
Packit b5b901
    connections (which is why it is enabled by default) but may lead to uneven
Packit b5b901
    load distribution in multi-process setups.
Packit b5b901
Packit b5b901
.. c:function:: int uv_tcp_bind(uv_tcp_t* handle, const struct sockaddr* addr, unsigned int flags)
Packit b5b901
Packit b5b901
    Bind the handle to an address and port. `addr` should point to an
Packit b5b901
    initialized ``struct sockaddr_in`` or ``struct sockaddr_in6``.
Packit b5b901
Packit b5b901
    When the port is already taken, you can expect to see an ``UV_EADDRINUSE``
Packit b5b901
    error from either :c:func:`uv_tcp_bind`, :c:func:`uv_listen` or
Packit b5b901
    :c:func:`uv_tcp_connect`. That is, a successful call to this function does
Packit b5b901
    not guarantee that the call to :c:func:`uv_listen` or :c:func:`uv_tcp_connect`
Packit b5b901
    will succeed as well.
Packit b5b901
Packit b5b901
    `flags` can contain ``UV_TCP_IPV6ONLY``, in which case dual-stack support
Packit b5b901
    is disabled and only IPv6 is used.
Packit b5b901
Packit b5b901
.. c:function:: int uv_tcp_getsockname(const uv_tcp_t* handle, struct sockaddr* name, int* namelen)
Packit b5b901
Packit b5b901
    Get the current address to which the handle is bound. `name` must point to
Packit b5b901
    a valid and big enough chunk of memory, ``struct sockaddr_storage`` is
Packit b5b901
    recommended for IPv4 and IPv6 support.
Packit b5b901
Packit b5b901
.. c:function:: int uv_tcp_getpeername(const uv_tcp_t* handle, struct sockaddr* name, int* namelen)
Packit b5b901
Packit b5b901
    Get the address of the peer connected to the handle. `name` must point to
Packit b5b901
    a valid and big enough chunk of memory, ``struct sockaddr_storage`` is
Packit b5b901
    recommended for IPv4 and IPv6 support.
Packit b5b901
Packit b5b901
.. c:function:: int uv_tcp_connect(uv_connect_t* req, uv_tcp_t* handle, const struct sockaddr* addr, uv_connect_cb cb)
Packit b5b901
Packit b5b901
    Establish an IPv4 or IPv6 TCP connection. Provide an initialized TCP handle
Packit b5b901
    and an uninitialized :c:type:`uv_connect_t`. `addr` should point to an
Packit b5b901
    initialized ``struct sockaddr_in`` or ``struct sockaddr_in6``.
Packit b5b901
Packit b5b901
    On Windows if the `addr` is initialized to point to an unspecified address
Packit b5b901
    (``0.0.0.0`` or ``::``) it will be changed to point to ``localhost``.
Packit b5b901
    This is done to match the behavior of Linux systems.
Packit b5b901
Packit b5b901
    The callback is made when the connection has been established or when a
Packit b5b901
    connection error happened.
Packit b5b901
Packit b5b901
    .. versionchanged:: 1.19.0 added ``0.0.0.0`` and ``::`` to ``localhost``
Packit b5b901
        mapping
Packit b5b901
Packit b5b901
.. seealso:: The :c:type:`uv_stream_t` API functions also apply.
Packit Service e08953
Packit Service e08953
.. c:function:: int uv_tcp_close_reset(uv_tcp_t* handle, uv_close_cb close_cb)
Packit Service e08953
Packit Service e08953
    Resets a TCP connection by sending a RST packet. This is accomplished by
Packit Service e08953
    setting the `SO_LINGER` socket option with a linger interval of zero and
Packit Service e08953
    then calling :c:func:`uv_close`.
Packit Service e08953
    Due to some platform inconsistencies, mixing of :c:func:`uv_shutdown` and
Packit Service e08953
    :c:func:`uv_tcp_close_reset` calls is not allowed.
Packit Service e08953
Packit Service e08953
    .. versionadded:: 1.32.0