如何在libuv中获取已接受的tcp套接字的文件描述符?

时间:2017-01-28 18:25:00

标签: c linux sockets tcp libuv

POSIX accept函数返回已接受的套接字的描述符。但是uv_accept会返回错误指示符。

如何获取文件描述符呢?

2 个答案:

答案 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_tint的别名,因此您可以执行以下操作:

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);