当前位置: 技术问答>linux和unix
socket的select使用超时的问题
来源: 互联网 发布时间:2016-08-17
本文导语: 一段udp客户端程序,c写的,在windows下没问题,在linux下时,在发送数据等待回应时,用select就会超时,去掉select能够正常读数,这是什么原因? 调用select的函数: int is_readible(int * bReadible) { struct timeval timeout...
一段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;
}
}
调用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 的第一个参数必须是 m_hNtpClientSocket + 1
|
楼上是正解,select函数第一个参数是fd_set的max值,一般都是取最大的fd并且+1
|
bingo