为什么我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;
}
select()函数timeout
答案:2 悬赏:40 手机版
解决时间 2021-01-31 19:36
- 提问者网友:活着好累
- 2021-01-30 21:14
最佳答案
- 五星知识达人网友:野味小生
- 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上的信息
}
}
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯