select()只返回一次正值

时间:2014-12-03 09:07:49

标签: c sockets embos select-function

当某些数据包按预期到达UDP端口时,select函数返回+ ve值。但这只发生过一次。从第二次在UDP端口上收到数据包时,该功能没有响应。但是,如果我在同一个套接字上执行sendto(),那么在收到UDP数据包后第一次,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 个答案:

答案 0 :(得分:1)

select( &readFD, NULL, NULL, 2000 )

Bzzt。 select()的第四个参数是struct timeval *,而不是整数。请参阅man page