当前位置:编程学习 > C/C++ >>

说一个丢人现眼的错误

用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++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,