我正在使用POSIX接口进行一些套接字编程。我试图使用select()函数来监视何时可以读取/写入无阻塞套接字。
使用select()函数时,我给它提供了一组读写文件描述符。具体来说,我有一个套接字fd,我想检查它是否可读可写。
该POSIX文件指出,返回值是所有的fd功能集合所有文件描述符的总和。
我的早期测试表明,我得到一个很好的“ 2”字样(这意味着我的套接字既可读又可写)。但是,如果文件描述符不能同时变为可读写状态,会发生什么情况?假设它在变为可写状态之前要经过一微秒的可读性?发生什么了?它是否仅返回1?
select()
当至少一个文件描述符准备好进行读取或写入,达到超时或信号中断时,将返回。
这意味着您必须select()
在确定至少一个文件描述符已准备好读取或写入(这些文件集已由修改select()
)之后,才测试给定的文件描述符集。
在成功完成后,
pselect()
或select()
功能应修改的对象指向的readfds
,writefds
和errorfds
参数指示哪些文件描述符准备好读,准备好写,或有错误情况分别挂起,并应返回的准备总数所有输出集中的描述符。对于每个小于的文件描述符nfds
,如果在输入上设置了相应的位并且该文件描述符的关联条件为true,则在成功完成时应设置相应的位。
(来自上的POSIX文档select()
)
如果您需要同时打开文件描述符以进行读取和写入,则必须遍历select()
直到满足两个条件。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句