[C++] 关于FD_SETSIZE大小的问题
2011-05-17 20:38
274 查看
在linux里,提到网络编程,就会涉及到select,多路复用IO,虽然这个效率不是很高,但是对于一般应用还是足够了。
我写了一个小程序,如下:
输出结果是:
看样子没有到达我设置的2000就结束打印了,而且结果中没有fail。。。
后来查询,发现FD_SET的第一个参数不能超过FD_SETSIZE(在<bits/typesizes.h>里定义,我这里为1024),可以看到在超过这个值以后,打印就不规律了,我猜测可能是踩到了后面的代码,并且越踩越远,最后正好踩出了循环体,但是没有出core,并打印了succ,不过具体过程没有仔细琢磨。
所以使用FD_SET要慎重!!!!
我写了一个小程序,如下:
#include <sys/select.h> #include <sys/socket.h> #include <stdio.h> #define NUM 2000 int fds[NUM]; int main() { for( int i = 0; i < NUM; ++i ) { printf("[%d]/t", i); if( ( fds[i] = socket( AF_INET, SOCK_STREAM, 0 ) ) >= 0 ) { printf( "%d/n",fds[i] ); fd_set rset; FD_ZERO(&rset); FD_SET( fds[i], &rset); } else { printf( "fail/n" ); } } printf( "succ/n" ); return 0; }
输出结果是:
[0] 3 [1] 4 [2] 5 [3] 6 [4] 7 [5] 8 [6] 9 [7] 10 [8] 11 [9] 12 [10] 13 [11] 14 [12] 15 [13] 16 [14] 17 [15] 18 [16] 19 [17] 20 …… [1014] 1017 [1015] 1018 [1016] 1019 [1017] 1020 [1018] 1021 [1019] 1022 [1020] 1023 [1021] 1024 [1022] 1025 [1023] 1026 [1024] 1027 [1033] 1028 [1050] 1029 [1083] 1030 [1148] 1031 [1277] 1032 [1534] 1033 succ
看样子没有到达我设置的2000就结束打印了,而且结果中没有fail。。。
后来查询,发现FD_SET的第一个参数不能超过FD_SETSIZE(在<bits/typesizes.h>里定义,我这里为1024),可以看到在超过这个值以后,打印就不规律了,我猜测可能是踩到了后面的代码,并且越踩越远,最后正好踩出了循环体,但是没有出core,并打印了succ,不过具体过程没有仔细琢磨。
所以使用FD_SET要慎重!!!!
相关文章推荐
- 关于select函数中timeval和fd_set重新设置的问题
- 关于QWidget和QDialog窗体居中的问题(必须要setFixedSize设初始值大小,否则没法居中)
- android TextView空间的setTextSize()方法在真机上运行大小问题
- 关于select函数中timeval和fd_set重新设置的问题
- 关于c++指针大小的问题
- 关于C++ STL key_comp value_comp的问题 能否介绍下这两个东西?以set为例子好了,谢谢
- C++Builder中关于INDY库的使用 以及一些问题的解决(E2238 Multiple declaration for 'fd_set')
- 关于JSplitPane在setDividerLocation(int)之后,折叠时大小变化的问题
- IOS开发:一个关于UIPopoverController设置contentsize大小的问题
- 自定义控件 TextView.setTextSize(R.dimen.text_size_16)字体大小的问题
- 关于select函数中timeval和fd_set重新设置的问题
- 关于select函数中timeval和fd_set重新设置的问题
- 关于select函数中timeval和fd_set重新设置的问题
- 小细节:关于C++各种变量的size问题。
- 关于layout()->setSizeConstraint(QLayout::SetFixedSize)的问题
- 关于InnoDB的索引大小的问题和注意事项
- 关于TextView.setTextColor(int); 括号里那个颜色int值的问题
- c++中ifstream读文件的问题(关于eof())
- 关于vs2010(C++ 工程)的异常问题(this is not a valid c/c++ file .CPP)的解决(C++ 初学者)
- 对arraylist中size大小的问题