windows select最多能監視多少個控制代碼
[code=C/C++]我在windows下使用select步驟如下 while(1) { FD_ZERO(&fds); for(i = 0; i <= 64; i++) { fd_set(sock[i], &fds); //sock[i]都已成功建立,並且都可以收到資料。 } ret = select(NULL, &fds, NULL, NULL, tv); if(ret < 0) exit(0); else if(ret == 0) continue; for(i = 0; i <= 64; i++) { if(FD_ISSET(sock[i], &fds)) { //do something } } } 我能肯定sock[64]收到了資料因為我用抓包工具看到的,但是上面的程式探查不出! 如果我將其中一個控制代碼例如sock[3]移除fds此時就能探查到sock[64]的資料! 最終我得出的結論是select最多隻能監視63個控制代碼,超過這之後的就無法探查!這是什麼原因,有人遇到過類似情況嗎?
偷偷告訴你一個南京不用上班就能輕鬆賺錢的辦法 廣告 易神 · 燨燚
問題點數:20分
CSDN今日推薦
0 2011-10-20 11:27:49
我記得是1024
0 2011-10-20 11:36:04
C/C++ code?
1 2 3 |
|
在WinSock2.h 試一下改一下FD_SETSIZE的值
0 2011-10-20 11:38:56
引用 1 樓 zhanshen2891 的回覆:
我記得是1024
應該是這個0.0
0 2011-10-20 12:17:01
引用 2 樓 lanneret1234 的回覆:
C/C++ code #ifndef FD_SETSIZE #define FD_SETSIZE 64 #endif /* FD_SETSIZE */ 在WinSock2.h 試一下改一下FD_SETSIZE的值
按照你說的方法我將那個巨集改大後問題解決了!!!