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推荐

CSDN今日推荐

zhanshen2891

Bbs5

0 2011-10-20 11:27:49

引用 ・ 举报 ・ #1 得分:1

我记得是1024

lanneret1234

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的值

woailp___2005

Bbs3

0 2011-10-20 11:38:56

引用 ・ 举报 ・ #3 得分:1

引用 1 楼 zhanshen2891 的回复:

我记得是1024


应该是这个0.0

lisong871121

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的值


按照你说的方法我将那个宏改大后问题解决了!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值