【发布时间】:2020-12-09 08:51:57
【问题描述】:
使用select()时,我理解的过程是:
- 在数据进入时使用您想知道的文件描述符填充 fd_set 结构。
- 使用您想知道何时可以写入的文件描述符填充 fd_set 结构。
- 调用 select() 并阻塞直到发生某些事情。
- 一旦 select() 返回,对所有文件描述符调用 ISSET() 以查看它们是否发生了问题,并相应地为它们提供服务。
- 重复。
然而,我不明白“设置”文件描述符究竟意味着什么。在这个documentation 中,它表示文件描述符是指定fd_set 的一部分。但是,如果 ISSET() 检查文件描述符是否发生了问题,为什么还要在每次迭代开始时、甚至在调用 select() 之前“设置”每个文件描述符?当事情发生变化时,它们不应该只被“设置”吗?它们可以在 select() 返回之前的某个时间点“取消设置”吗?
【问题讨论】:
-
select更改传入的fd_set的值(通过指针)。因此,调用后fd_set的值可能与调用前不同。例如,您可以设置 10 个 fds 来监视读取数据,但在select返回后,只有 1 个 fd 可能被设置为只有 1 个已准备好数据..
标签: c select file-descriptor