我正在使用 POSIX 接口进行一些套接字编程。我正在尝试使用 select() 函数来监视非阻塞套接字何时准备好进行读/写。
在使用 select() 函数时,我给了它一组读写文件描述符。具体来说,我有一个套接字 fd,我想检查它是否既可读又可写。
POSIX 文档指出,返回值是所有 fd 集中所有文件描述符的总和。
我的早期测试表明我得到了一个很好的“2”(这意味着我的套接字既可读又可写)。但是,如果文件描述符没有同时变为可读/可写,会发生什么?假设它在变得可写之前变得可读一微秒?怎么了?它只返回一个 1 吗?
select()
当至少有一个文件描述符准备好读取或写入时,或者达到超时时间,或者被信号中断时,将返回。这意味着您必须
select()
在确定至少一个文件描述符已准备好读取或写入之后测试给定的文件描述符集(这些集由 修改select()
)。(来自POSIX 文档
select()
)如果您需要打开文件描述符以进行读取和写入,则必须循环
select()
直到满足两个条件。