永发信息网

select()函数timeout

答案:2  悬赏:40  手机版
解决时间 2021-01-31 19:36
  • 提问者网友:活着好累
  • 2021-01-30 21:14
为什么我select()设置了timeout为10秒
但是
if(select()==0)
{
printf("timeout\n");
}
还是不停打印呢,不是要等待10S才打印一次吗

time_out.tv_sec = 10;
time_out.tv_usec = 0;
FD_ZERO(&read_fds);
FD_SET(serv_sd, &read_fds);
result = select(serv_sd+1, &read_fds, NULL, NULL, &time_out);
if (result == -1)
{
continue;
}
else if(result == 0)
{
printf("timeout\n");
continue;
}
最佳答案
  • 五星知识达人网友:野味小生
  • 2021-01-30 22:44
发个完整的出来看看·······
全部回答
  • 1楼网友:痴妹与他
  • 2021-01-30 22:54
socket s; fd_set fdread; int ret; // 在这里省略了建立socket和accept的调用 // 这个while循环对建立起来的socket进行io while(true) { // select之前要清空read set fd_zero(&fdread); // 把s加入到read set里 fd_set(s, &fdread); if ((ret = select(0, &fdread, null, null, null)) // 第一个参数总是0,后面分别是read,write和except set // 他们之中的任何一个都可以是0,最后一个参数是select的超时等待时间 == socket_error) { // 到这里表示出现了错误 } if (ret > 0) { // 到这里如果你只accept了一个socket,那么ret==1,如果你和多个socket进行io,ret的值将大于1 // 现在你要做的就是检查s是否在read set里 if (fd_isset(s, &fdread)) // 如果是这样 { // socket s现在处于可读状态,之后你可以调用read来获取s上的信息 } } }
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯