答案 0 :(得分:1)
这个问题可以稍微重新表述为:
从句柄中提取文件描述符
具有讽刺意味的是,这是libuv 1.0迁移指南的一部分标题(有关详细信息,请参阅here)。
在1.0版之前,不推荐的方法是访问库的内部,如下所示:
handle->io_watcher.fd
从libuv v1.0开始,推荐的方法是改用uv_fileno
文档说明:
获取与平台相关的文件描述符等效项 支持以下句柄:TCP,管道,TTY,UDP和轮询。 [...]
因此,它取决于您使用的libuv版本,这是将其从句柄中删除的最佳方式。
答案 1 :(得分:-1)
您可以使用客户端uv_stream
上的uv_fileno
功能。
在Linux和Darwin上,返回的uv_os_fd_t
是int
的别名,因此您可以执行以下操作:
uv_tcp_t *client;
int conn_s;
// ...
uv_accept(server, (uv_stream_t*) client);
uv_fileno((uv_handle_t *)client, &conn_s);
printf("%d", conn_s);