Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 是否需要在选择系统调用之间重置fd_设置?_C_Unix - Fatal编程技术网

C 是否需要在选择系统调用之间重置fd_设置?

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()之前,是

在Unix中使用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中并不常见。