//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_ISSET
才能读取fd 吗?
根据我的理解,读取集中只有一个fd并且返回值大于0那么传入的fd
应该总是在readfds
中。
最佳答案
如果 select()
的返回值与所有输入中设置的 FD 总数相同,则无需调用 FD_SET
fd_set
s。你只用一个 fd_set
调用它,它只有一个 FD 集,而 select
返回 1
的情况只是这种情况的一个特例.
关于c++ - 单FD调用 `FD_SET`后还需要调用 `select`吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30467115/