//int fd <= socket fd
timeval tv;
tv.tv_sec = 100;
tv.tv_usec = 0;
fd_set readfds;
FD_ZERO( &readfds );
FD_SET( fd, &readfds );
const int iRes = select( fd + 1, &readfds, NULL, NULL, &tv );
if (iRes > 0)
{
if (FD_ISSET( fd, &readfds )
{
// read from fd
}
} else {
// 0: timeout
// -1: error in select
}
问题:在我从fd读取之前,我是否必须在上面的代码中使用FD_ISSET
?
根据我的理解,在读集中只有一个fd,返回值大于0,那么传递的fd
应该始终在readfds
。
答案 0 :(得分:2)
如果FD_SET
的返回值与所有输入{{1}中设置的FD的总数相同,则不需要致电select()
}}秒。如果您只使用一个fd_set
来调用它,它只有一个FD集,并且fd_set
返回select
只是一个特殊情况。