[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今日推荐
- ⋅ 句柄监控
- ⋅ 用linux命令和程序实际测试一下单进程能打开的最大的句柄数(也可以说是文件数)------并不一定是1024/2048哈
- ⋅ Windows操作系统单文件夹下到底能存放多少文件及单文件的最大容量
- ⋅ [转]WINDOWS下一个文件夹最多可以放多少个文件--终于找到答案了
- ⋅ WINDOWS下一个文件夹最多可以放多少个文件--终于找到答案了
- ⋅ 系统监控之文件句柄监控
- ⋅ oracle 中IN命令
- ⋅ window一个文件夹中最多可以存储多少个文件
- ⋅ select句柄数限制 及总结
- ⋅ 一个进程最多能包含多少线程
0 2011-10-20 11:27:49
引用 ・ 举报 ・ #1 得分:1
我记得是1024
0 2011-10-20 11:36:04
引用 ・ 举报 ・ #2 得分:18
C/C++ code?
1 2 3 |
|
在WinSock2.h
试一下改一下FD_SETSIZE的值
0 2011-10-20 11:38:56
引用 ・ 举报 ・ #3 得分:1
引用 1 楼 zhanshen2891 的回复:
我记得是1024
应该是这个0.0
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的值
按照你说的方法我将那个宏改大后问题解决了!!!