程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 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了!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved