c++ - 单FD调用 `FD_SET`后还需要调用 `select`吗?

标签 c++ linux

//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_sets。你只用一个 fd_set 调用它,它只有一个 FD 集,而 select 返回 1 的情况只是这种情况的一个特例.

关于c++ - 单FD调用 `FD_SET`后还需要调用 `select`吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30467115/

相关文章:

C++:组合/多重集函数(阶乘溢出)

c++ - Visual Studio 2015 “Apply Code Changes” 被禁用

c++ - 通过 void 函数检索所有数据

c++ - 为什么我需要在临时 dynamic_bitset 上调用 std::move?

linux - 使用 -T 开关运行时 $ENV{PATH} 不安全

linux - 如何从 grep 的输出中选择?

c++ - 无法将 'idt_entry_t (*)[256] 转换为 u8int*

c - Linux mint 将文件拖放到我的程序的桌面图标上

python - 您如何跨多个操作系统手动告诉 Python 在脚本本身中使用哪个版本?

Python 网络脚本不能在 apache 上运行