0

当某些数据包按预期到达 UDP 端口时,select 函数将返回 +ve 值。但这只会发生一次。从第二次在 UDP 端口接收到数据包时,该函数没有响应。但是在收到 UDP 数据包后的第一次,如果我在同一个套接字上执行 sendto(),则选择函数正在响应。这种行为的原因是什么?

编码:

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 );
      }
   }
}
4

1 回答 1

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

呸呸呸。to 的第四个参数select()是 a struct timeval *,而不是整数。请参阅手册页

于 2014-12-03T09:16:37.053 回答