繁体   English   中英

select() 如何返回除 -1、0 或 1 之外的任何值?

[英]How would select() return anything other than -1, 0, or 1?

这对我来说绝对只是一个愚蠢的误解,但是 select() 的手册页指出:

timeout 参数指定 select() 应阻止等待文件描述符准备就绪的时间间隔。 调用将阻塞,直到:

*文件描述符准备就绪;

*调用被信号处理程序中断; 或者

*超时到期。

而且,那

成功时,select() 和 pselect() 返回三个返回的描述符集中包含的文件描述符的数量(即在 readfds、writefds、exceptfds 中设置的总位数),如果超时到期可能为零在任何有趣的事情发生之前。 出错时返回-1,设置errno表示出错; 文件描述符集未修改,超时未定义。

所以我的问题是——如果它在文件描述符准备好后立即停止阻塞,它会不会立即返回 1? 如果没有 fds 准备好,则返回 0,否则返回错误并返回 -1。

显然在实践中它返回超过 1:重点是你应该能够读/写多个 fds,对吧?

由于现代抢占式多任务的工作方式,多个描述符可能会在您的进程被唤醒之前准备就绪,并且select调用对描述符进行计数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM