簡體   English   中英

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

[英]How to get file descriptor for an accepted tcp socket in libuv?

POSIX accept函數返回已被接受的套接字的描述符。 但是, uv_accept返回錯誤指示符。

那么如何獲取文件描述符?

這個問題可以稍微重新表述為:

從句柄中提取文件描述符

具有諷刺意味的是,這是libuv 1.0遷移指南的一部分的標題(有關更多詳細信息,請參見此處 )。

在1.0版之前,不建議這樣做的方法是訪問庫的內部信息,如下所示:

handle->io_watcher.fd

從libuv v1.0開始,推薦的方法是使用uv_fileno
該文檔指出:

獲取等效於平台的文件描述符。
支持以下句柄:TCP,管道,TTY,UDP和輪詢。 [...]

因此,這取決於所使用的libuv版本,這是使它脫離句柄的最佳方法。

您可以在客戶端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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM