сокет - использование выбора для тайм-аута - PullRequest
0 голосов
/ 04 января 2019

Я пытаюсь выучить сокеты. пока мне удалось открыть сокет (как сервер), подключиться, отправить и получить некоторые данные.
Сейчас я пытаюсь установить ограничение времени ожидания в функции 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 голосов
/ 04 января 2019

Изменение

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...