台灣最大程式設計社群網站
線上人數
2197
 
會員總數:245979
討論主題:189557
歡迎您免費加入會員
討論區列表 >> C/C++ >> VC++ Non-Blocking 程式請教
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
VC++ Non-Blocking 程式請教
價值 : 50 QP  點閱數:580 回應數:2
樓主

Blue
初學者
322 94
1058 172
發送站內信

Hi,各位先進大家好:
因要作Non-Blocking 程序,
以下的測試程式是從 Linux 轉來的,
在 int ret = select(FD_SETSIZE, &FReadFDs, NULL, NULL, &timeout);
這一段,在 Linux 中所得的是 0, 在 Windows 中卻是 -1,
不知那位先進可以指點一下,
謝謝!


#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>

#ifdef _WIN32
#include <windows.h>
#include <conio.h>
#pragma warning(disable: 4996)
#pragma comment(lib, "wsock32.lib")
#pragma comment(lib, "winmm.lib")
#pragma comment(lib, "iphlpapi.lib")
#endif

fd_set FClientFDs;
fd_set FReadFDs;

////////////////////////////////////////// main //////////////////////////////////////////
int main(int argc, char **argv) {

#ifdef _WIN32
WSADATA m_wsadata;
WSAStartup(MAKEWORD(2, 0), &m_wsadata);
#endif

FD_ZERO(&FClientFDs);

struct timeval timeout;
timeout.tv_sec = 0;
timeout.tv_usec = 200000; //0.2 秒
memcpy(&FReadFDs, &FClientFDs, sizeof(FClientFDs));

int ret = select(FD_SETSIZE, &FReadFDs, NULL, NULL, &timeout);
printf("Select result =%d\n", ret);


#ifdef _WIN32
WSACleanup();
#endif
return 0;
}




搜尋相關Tags的文章: [ Non-Blocking ] ,
本篇文章發表於2016-08-11 14:49
1樓
回應

Raymond
檢舉此回應
視窗系統可以用 WSAGetLastError() 函式來得知錯誤的原因.
本篇文章回覆於2016-08-12 10:40
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
作者回應

Blue
檢舉此回應
Hi,感謝 Raymond 先進的指導:
使用 WSAGetLastError() 函式 取得錯誤代碼是 10022 Invalid argument.
但,著實不知是何參數錯誤,
為何 Linux 上不會出現問題?
謝謝!
本篇文章回覆於2016-08-19 11:48
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.