//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
中。 最佳答案
如果FD_SET
的返回值与所有输入select()
中设置的FD总数相同,则无需调用fd_set
。仅用一个fd_set
调用它的情况,它只有一组FD,而select
返回1
只是这种情况的特例。
关于c++ - 用单个FD调用 `FD_SET`之后是否需要调用 `select`?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30467115/