uv_tcp_t
— TCP handle¶
TCP handles are used to represent both TCP streams and servers.
uv_tcp_t
is a ‘subclass’ of uv_stream_t
.
API¶
-
int
uv_tcp_init
(uv_loop_t* loop, uv_tcp_t* handle)¶ Initialize the handle. No socket is created as of yet.
-
int
uv_tcp_init_ex
(uv_loop_t* loop, uv_tcp_t* handle, unsigned int flags)¶ Initialize the handle with the specified flags. At the moment the lower 8 bits of the flags parameter are used as the socket domain. A socket will be created for the given domain. If the specified domain is
AF_UNSPEC
no socket is created, just likeuv_tcp_init()
.New in version 1.7.0.
-
int
uv_tcp_open
(uv_tcp_t* handle, uv_os_sock_t sock)¶ Open an existing file descriptor or SOCKET as a TCP handle.
Changed in version 1.2.1: the file descriptor is set to non-blocking mode.
Note
The passed file descriptor or SOCKET is not checked for its type, but it’s required that it represents a valid stream socket.
-
int
uv_tcp_keepalive
(uv_tcp_t* handle, int enable, unsigned int delay)¶ Enable / disable TCP keep-alive. delay is the initial delay in seconds, ignored when enable is zero.
-
int
uv_tcp_simultaneous_accepts
(uv_tcp_t* handle, int enable)¶ Enable / disable simultaneous asynchronous accept requests that are queued by the operating system when listening for new TCP connections.
This setting is used to tune a TCP server for the desired performance. Having simultaneous accepts can significantly improve the rate of accepting connections (which is why it is enabled by default) but may lead to uneven load distribution in multi-process setups.
-
int
uv_tcp_bind
(uv_tcp_t* handle, const struct sockaddr* addr, unsigned int flags)¶ Bind the handle to an address and port. addr should point to an initialized
struct sockaddr_in
orstruct sockaddr_in6
.When the port is already taken, you can expect to see an
UV_EADDRINUSE
error from eitheruv_tcp_bind()
,uv_listen()
oruv_tcp_connect()
. That is, a successful call to this function does not guarantee that the call touv_listen()
oruv_tcp_connect()
will succeed as well.flags can contain
UV_TCP_IPV6ONLY
, in which case dual-stack support is disabled and only IPv6 is used.
-
int
uv_tcp_getsockname
(const uv_tcp_t* handle, struct sockaddr* name, int* namelen)¶ Get the current address to which the handle is bound. addr must point to a valid and big enough chunk of memory,
struct sockaddr_storage
is recommended for IPv4 and IPv6 support.
-
int
uv_tcp_getpeername
(const uv_tcp_t* handle, struct sockaddr* name, int* namelen)¶ Get the address of the peer connected to the handle. addr must point to a valid and big enough chunk of memory,
struct sockaddr_storage
is recommended for IPv4 and IPv6 support.
-
int
uv_tcp_connect
(uv_connect_t* req, uv_tcp_t* handle, const struct sockaddr* addr, uv_connect_cb cb)¶ Establish an IPv4 or IPv6 TCP connection. Provide an initialized TCP handle and an uninitialized
uv_connect_t
. addr should point to an initializedstruct sockaddr_in
orstruct sockaddr_in6
.The callback is made when the connection has been established or when a connection error happened.
See also
The uv_stream_t
API functions also apply.