0

我对用于套接字编程的 I/O 多路复用函数的 select() 有一个简单的问题。

select函数执行时,据说修改了它的检查fd set,所以每次都需要重新reset。(例如 fd_set read_fds ..)

但这是为什么呢?

为什么 select 函数会清除其 fd 集上无意义的文件描述符?

选择功能对(或修改)原始 fd 集有哪些更改?

谢谢。

我从书本或网络上的其他地方找到的所有内容都说“我们需要”为每个循环例程重置,但它并没有说明它是怎么回事。

4

1 回答 1

0

为什么 select 函数会清除其 fd 集上无意义的文件描述符?

因为在 select() 返回后,您(可能)会想要(通过 FD_ISSET())查询哪些套接字现在可以读取(或可以写入)。

因此,当 select() 返回时,它会修改 fd_set 对象,以便在其中仍然设置的唯一位是表示现在准备好的套接字的位。如果不这样做,FD_ISSET() 将无法知道哪些套接字已准备好使用,哪些未准备好。

于 2013-12-05T01:18:45.257 回答