用于多客户端套接字编程的函数select()

时间:2013-12-04 23:54:45

标签: sockets networking select io multiplexing

关于socket编程的I / O复用函数select(),我有一个简单的问题。

当select函数执行时,它表示它修改了它的检查fd集, 所以我们每次都需要重新设置它。 (例如fd_set read_fds ..)

但为什么会这样?

为什么select函数会在其fd集上清除不感兴趣的文件描述符?

选择功能给予(或修改)原始fd设置的哪些更改?

感谢。

我在书上或网上其他地方发现的所有内容都说 '我们需要'为每个循环程序重置但不知道它是怎么回事。

1 个答案:

答案 0 :(得分:0)

  

为什么select函数会清除不感兴趣的文件描述符   在它的fd集上?

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

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