【发布时间】:2015-01-06 16:46:29
【问题描述】:
我正在尝试创建线程以从套接字描述符中读取。需要使用非阻塞循环来检查当前时间并在会话结束后关闭套接字,但FD_ISSET 即使在套接字上可以读取数据也会返回 0。
fd_set fds;
FD_ZERO(&fds);
FD_SET(session_ref->fd, &fds);
while(1)
{
while(1)
{
FD_CLR(session_ref->fd, &fds);
FD_SET(session_ref->fd, &fds);
n = select( session_ref->fd, &fds, NULL, NULL, &timeout ); // n = 0
if( FD_ISSET( session_ref->fd, &fds ) )
break;
else
{
// some operations
}
sleep(1);
}
n = read( session_ref->fd, buffer, 2048 );
printf("Read: %i\n", n);
}
我哪里做错了?
【问题讨论】:
-
你没有检查
n == 1 -
但n也等于0
-
您在
select()的第一个参数中传递了fd。您需要通过fd+1代替。阅读文档。