这绝对只是我的一个愚蠢的误解,但是select((的手册页指出:
timeout 参数指定 select(( 应阻止等待文件描述符准备就绪的时间间隔。 呼叫将阻止,直到:
*文件描述符准备就绪;
*呼叫被信号处理程序中断;或
*超时到期。
此外,那
成功后,select(( 和 pselect(( 返回文件编号 三个返回的描述符集中包含的描述符(即 在 readFDS、WRITEFD、 例外(,如果超时在任何事情之前过期,则可能为零 有趣的事情发生了。 出错时,返回 -1,并将 errno 设置为 指示错误;文件描述符集未修改,并且 超时变为未定义。
所以我的问题是 - 如果它在文件描述符准备就绪后立即停止阻塞,它不会立即返回 1 吗?如果没有 fds 准备就绪,则返回 0,否则返回错误并返回 -1。
显然,在实践中它返回的不仅仅是 1:重点是您应该能够读/写多个 fd,对吧?
由于现代抢占式多任务处理的工作方式,在进程被唤醒并且select
调用对描述符进行计数之前,多个描述符可能会准备就绪。