首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 操作系统 > UNIXLINUX >

socket的select使用超时的有关问题

2012-03-20 
socket的select使用超时的问题一段udp客户端程序,c写的,在windows下没问题,在linux下时,在发送数据等待回

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
[解决办法]

探讨

nStatus = select(0, &fds, NULL, NULL, &timeout);

用错列。。。


select 的第一个参数必须是 m_hNtpClientSocket + 1

热点排行