poll操作时的疑问
我在开发一个proxy的时候碰到了一个奇怪的问题:
proxy的监听端口上执行poll时总是返回errno=EINTR,但是用ethereal在本机抓包可以看到这个端口上已经收到了对方发的包,poll中的fd对应的socket也已经绑定正确的端口。
大侠们能不能给点思路,可能是什么原因导致收到包时poll无效?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
系统调用被信号打断才会返回 EINTR 的
那能不能查看是什么样的系统调用呢?
我在poll里面设置的timeout是-1
poll 就是这个被打断的系统调用了。如果 poll 返回 -1 且这时 errno == EINTR,那么就是说明 poll 的过程被一个信号打断。
贴出你相关的代码片断看看吧。
while(1) {
if (rtp_nsessions > 0)
timeout = RTPS_TICKS_MIN;
else
timeout = INFTIM;
sigprocmask(SIG_UNBLOCK, &set, &oset);
i = poll(fds, nsessions + 1, timeout);
if (i < 0 && errno == EINTR)
continue;
sigprocmask(SIG_BLOCK, &set, &oset);
...
RTPS_TICKS_MIN=10
INFTIM=-1
nsessions=1
即使有收到报文时也执行了continue