select系统调用之间是否需要重置fd_set?

发布于 2024-10-09 21:44:03 字数 467 浏览 2 评论 0原文

我在 Unix 中使用 select 函数时遇到问题。

我有一台等待连接的服务器。首先,我使用 FD_SET(listener, readfds) 将侦听套接字文件描述符 listener 添加到 fd_set readfds,然后在 中使用它选择()。

当我获得连接时,我调用 accept() 并使用接受的文件描述符在 select 中设置 readfds 并开始从连接接收数据。但是,当我检查 strace 中的代码时,当 select() 再次执行时,select 不会在 readfds 中显示侦听器。

在再次调用 select() 之前,是否需要使用 FD_SET(listener, readfds) 再次设置侦听器文件描述符?

I am facing a problem using the select function in Unix.

I have a server that waits for for a connection. First I add the listening socket file descriptor listener to the fd_set readfds using FD_SET(listener, readfds) and then I use that in select().

When I get a connection, I call accept() and set the readfds in select with the accepted file descriptor and start receiving the data from connection. However, when I check the code in strace, The select doesn't show the listener in the readfds while select() is executing a second time.

Do I need to set the listener file descriptor again using FD_SET(listener, readfds) before calling select() again?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

北凤男飞 2024-10-16 21:44:03

是的(需要在 select() 系统调用之间重置 fd_set)。

这很麻烦,但它们充当输入/输出参数;它们由系统调用读取和修改。当 select() 返回时,值已全部修改以反映文件描述符集已准备就绪。因此,每次调用 select() 之前,您都必须(重新)初始化 fd_set 值。

Yes (it is necessary to reset the fd_set between select() system calls).

It is a nuisance, but they act as input/output parameters; they are read by and modified by the system call. When select() returns, the values have all been modified to reflect the set of file descriptors ready. So, every time before you call select(), you have to (re)initialize the fd_set values.

酒儿 2024-10-16 21:44:03

乔纳森是对的。您每次都需要执行以下操作:

set readFDs
set writeFDs
set errorFDs
select(count_of_FDs, readFDs, writeFDs, errorFDs, timeout)

Jonathan is correct. You need to do the following everytime:

set readFDs
set writeFDs
set errorFDs
select(count_of_FDs, readFDs, writeFDs, errorFDs, timeout)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文