socket的select使用超时的问题
一段udp客户端程序,c写的,在windows下没问题,在linux下时,在发送数据等待回应时,用select就会超时,去掉select能够正常读数,这是什么原因?
调用select的函数:
int is_readible(int * bReadible)
{
struct timeval timeout;
fd_set fds;
int nStatus;
timeout.tv_sec=10;
timeout.tv_usec=10;
FD_ZERO(&fds);
FD_SET(m_hNtpClientSocket, &fds);
nStatus = select(0, &fds, NULL, NULL, &timeout);
printf("nStatus = %d \n",nStatus);
if (nStatus == -1)
{
return SD_FALSE;
}
else
{
*bReadible = !(nStatus == 0);
return SD_TRUE;
}
}
[解决办法]
nStatus = select(0, &fds, NULL, NULL, &timeout);
用错列。。。
select 的第一个参数必须是 m_hNtpClientSocket + 1
[解决办法]
楼上是正解,select函数第一个参数是fd_set的max值,一般都是取最大的fd并且+1
[解决办法]