2014-12-03 2 views
0

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

Какую платформу вы кодируете ... ??? Я не знаком с IP_FD_ISSET или с select() только с 4 параметрами ... – TonyB

+0

ОС EMBOS и с использованием стека EMBOS-IP –

ответ

1
select(&readFD, NULL, NULL, 2000) 

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

+0

Прошу прощения, что я не указал среду. Выбор API, который я использую, - это поставщик стека. Он ожидает целочисленного таймаута. Для меня реальная проблема, о которой я думаю, - это некоторая промывка порта, потому что если я отправляю какой-то пакет после успеха функции select(), выбор дает значение + ve каждый раз, когда я получаю UDP-пакет –

+0

EMBOS select() из следующего URI не проявляет этого поведения ... т.е. он НЕ посылает между выборами. https://www.segger.com/admin/uploads/productDocs/UM07001_embOSIP.pdf – TonyB

Смежные вопросы