0

一部のパケットが期待どおりに UDP ポートに到達すると、select 関数は +ve 値を返します。しかし、これは一度だけ起こります。UDP ポートでパケットを受信した 2 回目以降、関数は応答しません。しかし、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 );
      }
   }
}
4

1 に答える 1

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

うーん。の 4 番目のパラメータselect()struct timeval *、整数ではなく です。マニュアルページを参照してください。

于 2014-12-03T09:16:37.053 に答える