当某些数据包按预期到达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 );
}
}
}
答案 0 :(得分:1)
select( &readFD, NULL, NULL, 2000 )
Bzzt。 select()
的第四个参数是struct timeval *
,而不是整数。请参阅man page。