//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/

10-12 02:39