套接字-使用选择超时

时间:2019-01-04 11:12:51

标签: c++ sockets select

我正在尝试学习套接字。到目前为止,我成功地打开了一个套接字(作为服务器),进行了连接以及发送和接收一些数据。
现在,我试图在accept()函数中设置等待时间的限制。
我找到了一些代码示例,但目前还没有成功:

      //socket, bind...
      listen(this->sockfd, 1);

      int iResult;
      struct timeval tv;
      fd_set rfds;
      FD_ZERO(&rfds);
      FD_SET(0, &rfds);

      tv.tv_sec = 5;
      iResult = select(0, &rfds, (fd_set *) 0, (fd_set *) 0, &tv);
      if(iResult > 0)
      {
          std::cout<< "connected"<<endl;
      } else {
          std::cout<< "time out!" << endl;
      } 

我总是会“超时!”。
 你能指点什么错吗?谢谢

1 个答案:

答案 0 :(得分:3)

更改

FD_SET(0, &rfds);
// ...
iResult = select(0, &rfds, (fd_set *) 0, (fd_set *) 0, &tv);

FD_SET(this->sockfd, &rfds);
// ...
iResult = select(this->sockfd + 1, &rfds, nullptr, nullptr, &tv);