TCP句柄用于表示TCP流和服务器
uv_tcp_t是uv_stream_t的子类。
数据类型
uv_tcp_t
TCP句柄类型。
API
int uv_tcp_init(uv_loop_t* loop, uv_tcp_t* handle)
初始化句柄。到目前为止尚未创建套接字。
int uv_tcp_init_ex(uv_loop_t* loop, uv_tcp_t* handle, unsigned int flags)
用指定的标志初始化句柄。目前,只有flags参数的低8位用作套接字域。将为给定的域创建一个套接字。如果指定的域为AF_UNSPEC
no,则不会创建套接字uv_tcp_init()。
1.7.0版中的新功能。
int uv_tcp_open(uv_tcp_t* handle, uv_os_sock_t sock)
打开一个现有的文件描述符或SOCKET作为TCP句柄。
在版本1.2.1中更改:文件描述符设置为非阻塞模式。
注意 不会检查传递的文件描述符或SOCKET的类型,但是要求它表示一个有效的流套接字。
int uv_tcp_nodelay(uv_tcp_t* handle, int enable)
启用TCP_NODELAY,这将禁用Nagle的算法。
int uv_tcp_keepalive(uv_tcp_t* handle, int enable, unsigned int delay)
启用/禁用TCP保持活动状态。delay是以秒为单位的初始延迟,当使能为零时将被忽略。
int uv_tcp_simultaneous_accepts(uv_tcp_t* handle, int enable)
侦听新的TCP连接时,启用/禁用操作系统排队的同步异步接受请求。
此设置用于调整TCP服务器以获得所需的性能。具有同时接受可以大大提高接受连接的速率(这就是默认情况下启用它的原因),但可能导致多进程设置中的负载分配不均。
int uv_tcp_bind(uv_tcp_t* handle, const struct sockaddr* addr, unsigned int flags)
将句柄绑定到地址和端口。addr应该指向已初始化的struct sockaddr_in
struct或者 sockaddr_in6
当端口已被使用,您可能会看到一个UV_EADDRINUSE
错误无论从uv_tcp_bind(),uv_listen()或uv_tcp_connect()。也就是说,对该函数的成功调用并不能保证对该函数的调用uv_listen()或uv_tcp_connect()将成功。
标志可以包含UV_TCP_IPV6ONLY
,在这种情况下,将禁用双栈支持,并且仅使用IPv6。
int uv_tcp_getsockname(const uv_tcp_t* handle, struct sockaddr* name, int* namelen)
获取句柄绑定到的当前地址。名称必须指向有效且足够大的内存块,建议用于IPv4和IPv6支持。struct sockaddr_storage
int uv_tcp_getpeername(const uv_tcp_t* handle, struct sockaddr* name, int* namelen)
获取连接到句柄的对等方的地址。名称必须指向有效且足够大的内存块,建议用于IPv4和IPv6支持。struct sockaddr_storage
int uv_tcp_connect(uv_connect_t* req, uv_tcp_t* handle, const struct sockaddr* addr, uv_connect_cb cb)
建立IPv4或IPv6 TCP连接。提供一个初始化的TCP句柄和一个未初始化的uv_connect_t。addr应该指向已初始化的struct sockaddr_in
struct sockaddr_in6
在Windows上,如果addr初始化为指向未指定的地址(0.0.0.0
或::
),它将被更改为指向localhost
。这样做是为了匹配Linux系统的行为。
建立连接或发生连接错误时进行回调。
改变版本1.19.0:增加0.0.0.0
和::
对localhost
测绘
int uv_tcp_close_reset(uv_tcp_t* handle, uv_close_cb close_cb)
通过发送RST数据包重置TCP连接。这可以通过将SO_LINGER套接字选项设置为零的间隔时间,然后调用来实现uv_close()。由于某些平台不一致,不允许混用uv_shutdown()和 此函数调用。
1.32.0版中的新功能。