uv_tcp_t --- TCP句柄¶
TCP句柄用于表示TCP流和服务器。
uv_tcp_t 是 uv_stream_t 的一个 '子类型' 。
API¶
-
int
uv_tcp_init_ex(uv_loop_t* loop, uv_tcp_t* handle, unsigned int flags)¶ 以指定的标志来初始化句柄。 在此刻只有 flags 参数的低8位用于套接字域。一个套接字将为给定的域创建。 如果指定的域是
AF_UNSPEC则没有套接字被创建,就像uv_tcp_init()一样。1.7.0 新版功能.
-
int
uv_tcp_open(uv_tcp_t* handle, uv_os_sock_t sock)¶ 打开一个已存在的文件描述符或者套接字作为一个TCP句柄。
在 1.2.1 版更改: 文件描述符设为非阻塞模式。
注解
被传递的文件描述符或套接字没有类型检查,但是需要它代表一个合法的流套接字。
-
int
uv_tcp_keepalive(uv_tcp_t* handle, int enable, unsigned int delay)¶ 开启/禁用TCP keep-alive。 delay 是以秒计的起始延迟,当 enable 是零时被忽略。
-
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()的调用也会成功。flags 能包括
UV_TCP_IPV6ONLY,在这种情况下禁用双栈支持且只使用IPv6。
-
int
uv_tcp_getsockname(const uv_tcp_t* handle, struct sockaddr* name, int* namelen)¶ 获取句柄当前绑定的地址。 name 必须指向一个合法且足够大的内存块, 推荐使用
struct sockaddr_storage获得IPv4和IPv6支持。
-
int
uv_tcp_getpeername(const uv_tcp_t* handle, struct sockaddr* name, int* namelen)¶ 连接到句柄的远端的地址。 name 必须指向一个合法且足够大的内存块, 推荐使用
struct sockaddr_storage获得IPv4和IPv6支持。
-
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的映射
参见
uv_stream_t 的API函数也适用。