无缘无故地突破选择

时间:2014-04-01 08:13:14

标签: c sockets select-function

我正在做这样的事情

val = select(max_fd+1,&readfd,0,0,0);
if(val >=1){
    printf("I have got some value");
}

我的代码无缘无故地突破了选择。它不接收任何数据包。在10次运行中,我得到1次运行,等待选择。休息它就退出了。

已设置套接字以接收ICMP数据包。在那一次运行中,它完美地运行。这为什么会被淘汰9次?

2 个答案:

答案 0 :(得分:0)

我的猜测是你的文件描述符在这个过程中被关闭了。在这种情况下,val将为-1,errno将设置为EBADF

答案 1 :(得分:0)

如果有错误,

select()返回-1。 请检查select()的返回值,如果返回值为-1,请检查errno