c++ - 在套接字 C++ 中选择不起作用

标签 c++ c sockets select

我创建了一个实现tcpsocket的select功能的类。 (listenSock 是 TcpSocket 的 vector - 有效) 我不明白为什么第二次选择时调用程序停止工作。

TCPSocket* MultipleTCPSocketsListener::listenToSocket(){
    //TODO: create local set for the select function (fd_set)
    fd_set set;
    FD_ZERO (&set);
    FD_SET (0, &set);

    //TODO: fill the set with file descriptors from the socket list using (FD_SET macro)
    for ( int i = 0; i < listenSock.size(); i++ )
    {
        FD_SET (listenSock.at(i)->getSock(), &set);
    }

    //TODO: perform the select
    int sel=select(sizeof(set)*8,&set,NULL,NULL,NULL);

    //TODO: check the returned value from the select to find the socket that is ready
     if (sel==-1) {
          perror("select failed");
          return NULL;
     }

    //TODO: if select return a valid socket return the matching TCPSocket object otherwise return NULL
     if (sel > 0)
     {
         for ( int i = 0; i < listenSock.size(); i++ )
         {
             if (FD_ISSET(listenSock.at(i)->getSock(), &set)) return  listenSock.at(i);
         }
     }
    return NULL;
}

最佳答案

FD_SET (0, &set);

没用。您指示 select 将 stdin 视为要监视的套接字之一。

关于c++ - 在套接字 C++ 中选择不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27702722/

相关文章:

树莓派上视差 rfid 阅读器的 c 代码

c - 关于从寄存器GPIODATA读取引脚

c - 指向未知长度字符串的指针数组

c - 使用套接字发送/接收字符串

C套接字recv返回字节数但缓冲区中没有任何内容

c++ - 将图像拆分为 channel 的优化问题

用于体系结构 x86_64 的 C++ 重复符号..递增枚举类型

c++ - 为什么 snprintf 在打印单个数字时始终比 ostringstream 快 2 倍?

c++ - 引用成员绑定(bind)到一个临时对象,该对象的生命周期短于构造对象的生命周期

c++ - 错误 C2248 无法访问类 'boost::asio::basic_io_object<IoObjectService> 中声明的私有(private)成员