C 是否需要在选择系统调用之间重置fd_设置?
在Unix中使用select函数时遇到问题 我有一个等待连接的服务器。首先,我使用C 是否需要在选择系统调用之间重置fd_设置?,c,unix,C,Unix,在Unix中使用select函数时遇到问题 我有一个等待连接的服务器。首先,我使用fd\u集(listener,readfds)将侦听套接字文件描述符listener添加到fd\u集readfds,然后在select()中使用它 当我获得一个连接时,我调用accept(),在select中用接受的文件描述符设置readfds,并开始从连接接收数据。但是,当我检查strace中的代码时,select在readfds中不显示侦听器,而select()正在第二次执行 在再次调用select()之前,是
fd\u集(listener,readfds)
将侦听套接字文件描述符listener
添加到fd\u集readfds
,然后在select()
中使用它
当我获得一个连接时,我调用accept()
,在select中用接受的文件描述符设置readfds
,并开始从连接接收数据。但是,当我检查strace中的代码时,select在readfds
中不显示侦听器,而select()
正在第二次执行
在再次调用select()
之前,是否需要使用FD\u set(listener,readfds)
再次设置侦听器文件描述符
谢谢。是(有必要在select()
系统调用之间重置fd\u集
)
这是一个麻烦,但它们充当输入/输出参数;它们由系统调用读取和修改。返回时,所有值都已修改,以反映已准备好的文件描述符集。因此,每次调用
select()
之前,都必须(重新)初始化fd\u集的值。正确。每次都需要执行以下操作:
set readFDs
set writeFDs
set errorFDs
select(count_of_FDs, readFDs, writeFDs, errorFDs, timeout)
同样,在Linux上,超时值可以修改,因此也需要重新初始化。该标准允许这样做,但在其他类型的unix中并不常见。