一部のパケットが期待どおりに 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 );
}
}
}