如何解决errorfds vs select 返回值,select() 立即返回?
我来维护一个软件:
/*... init,setting timeout,etc ... */
FD_ZERO(&set);
FD_SET(socket_,&set);
int selectRes = select(socket_ + 1,&set,NULL,&timeout);
if (selectRes < 0) {
throw IoException("Select: ",errno);
}
if (selectRes == 0) {
throw TimeoutException();
}
/* ... then handle recvfrom,throw IoException if return < 0 ... */
IoException 应该导致程序终止。超时异常恢复操作。无一例外地通过循环返回。 socket_ 是一个 UNIX 数据报套接字(从另一个本地进程读取消息)。
该程序以非常高的优先级运行(需要快速响应消息),但预计大部分时间都处于空闲状态,等待 select() 超时等待传入消息。同时,它似乎有时会占用 100% 的 CPU 时间(没有收到足够的消息来授予这种行为)。出现的情况相当不稳定,别介意程序的高优先级让调试变得非常困难(一个小型的单核 Linux 嵌入式系统,其他一切都停止了)。
我担心 errorfds 位置的 NULL - 在这种情况下正在测试 select() 的返回值,或者如果套接字上存在错误条件但 errorfds 可能 select() 立即返回(带有 0)是 NULL,并在每次循环回 select() 时继续重复此操作?
或者,除了大量消息之外,还有哪些其他情况可以使 select() 立即退出(或者可能在自旋锁中等待而不是释放 CPU 时间)?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。