用socket做网络应用程序,发送和接收超时好办,Connect超时目前找来找去只有select这招了
于是,用到了timeval这个家伙。
起初我以为,要粗略设置秒数,就用tv_sec成员,要精确到百万分之一秒,就用tv_usec,结果设置为1秒的时候
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位;这里是一个秒数部分,一个微秒部分……
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了!