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 *
, а не целое число. Смотрите справочную страницу.