select() возвращает положительное значение только один раз

Функция выбора возвращает значение +ve, когда некоторые пакеты достигают порта UDP, как и ожидалось. Но это происходит только один раз. Со второго раза, когда пакет принят на порт UDP, функция не отвечает за это. Но в первый раз после получения пакета UDP, если я выполняю sendto() в том же сокете, функция select отвечает. В чем причина такого поведения?

Код:

while (true)
{
   IP_FD_ZERO (&readFD);
   IP_FD_SET  (ipSock, &readFD);

   if (select( &readFD, NULL, NULL, 2000 ) > 0)
   {
      if (IP_FD_ISSET( ipSock, &readFD ))       //activity on UDP socket
      {
         addrlen   = sizeof(SocketAddrIn_t);
         noOfbytes = recvfrom( ipSock, 
                              (char*)ipRxBuffer, 
                              sizeof(ipRxBuffer), 
                              0, 
                              (SocketAddr_t *)&from, 
                              (int*)&addrlen );
      }
   }
}

1 ответ

select( &readFD, NULL, NULL, 2000 )

Bzzt. Четвертый параметр select() это struct timeval *, а не целое число. Смотрите справочную страницу.

Другие вопросы по тегам