问题描述
我来维护一个软件:
/*... 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 (将#修改为@)