1. 程式人生 > >windows select最多能監視多少個控制代碼

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今日推薦

Bbs5

0 2011-10-20 11:27:49

引用舉報 ・ #1 得分:1

我記得是1024

Bbs4

0 2011-10-20 11:36:04

引用舉報 ・ #2 得分:18

C/C++ code?

1

2

3

#ifndef FD_SETSIZE

#define FD_SETSIZE      64

#endif /* FD_SETSIZE */

在WinSock2.h 試一下改一下FD_SETSIZE的值

Bbs3

0 2011-10-20 11:38:56

引用舉報 ・ #3 得分:1

引用 1 樓 zhanshen2891 的回覆:

我記得是1024

應該是這個0.0

Bbs2

0 2011-10-20 12:17:01

引用舉報 ・ #4 得分:0

引用 2 樓 lanneret1234 的回覆:

C/C++ code #ifndef FD_SETSIZE #define FD_SETSIZE      64 #endif /* FD_SETSIZE */ 在WinSock2.h 試一下改一下FD_SETSIZE的值

按照你說的方法我將那個巨集改大後問題解決了!!!