说一个丢人现眼的错误
用socket做网络应用程序,发送和接收超时好办,Connect超时目前找来找去只有select这招了
于是,用到了timeval这个家伙。
起初我以为,要粗略设置秒数,就用tv_sec成员,要精确到百万分之一秒,就用tv_usec,结果设置为1秒的时候
[cpp]
FD_ZERO(&fs);
FD_SET(sock, &fs);
tv.tv_sec = 0;
tv.tv_usec = 1000000;
ret = select(0, 0, &fs, 0, &tv);
if(ret <= 0)
{ // 链接超时
closesocket(sock);
return FALSE;
}
编译为debug,运行正常,1秒后超时返回;编译为release问题就来了,一般等待20多秒,丫丫的
查百度,谷歌未果;查MSDN->NULL
于是自己试试,发现跟64位那个结构体差不多,一个高32位一个低32位;这里是一个秒数部分,一个微秒部分……
[cpp]
FD_ZERO(&fs);
FD_SET(sock, &fs);
ret = dwConnTime / 1000000;
tv.tv_sec = (long)ret; //timeval结构体是多少秒又多少微秒
ret = dwConnTime % 1000000;
tv.tv_usec = (long)ret; //精度百万分之一秒
ret = select(0, 0, &fs, 0, &tv);
if(ret <= 0)
{
closesocket(sock);
return FALSE;
}
这样就ooxx了!
补充:软件开发 , C++ ,