【问题标题】:the function select() for multi client socket programming用于多客户端套接字编程的函数 select()
【发布时间】:2013-12-21 17:22:33
【问题描述】:

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

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

但这是为什么呢?

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

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

谢谢。

我从书中或网络上其他地方找到的所有内容都说 '我们需要'为每个循环例程重置,但它没有说明它是如何。

【问题讨论】:

    标签: sockets networking select io multiplexing


    【解决方案1】:

    为什么选择函数会清除无趣的文件描述符 在它的 fd 集上?

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多