linux 下select的1024限制

http://www.bubuko.com/infodetail-769475.htmlphp

1024限定的不仅是监听的个数,仍是文件描述符的

最大值,注意,是值 

今天编写模拟客户端程序进行测试,使用了select。以前一直错记成1024是对fd_set里fd个数的限制(个人程序是每次select一个fd,因此自我感受没问题),结果在socket链接个数到达1050~1100时,总发生段错误。

查看了core文件,反复理清程序的思路,都找不到问题点。更让我费解的是,经过注释部分代码(都是局部变量相关的),结果程序变成socket链接到达1500左右时发生段错误。html

 

后来想到试试是否是select有问题,模拟程序不调用select,所有采用阻塞的socket,结果测试到10000个socket链接都没有问题。app

 

最后在网上看到select中限定的fd的值最大值是FD_SETSIZE(个人环境下是1024),而不是个数。socket

也有人持反对意见,好比对值为1025的fd进行select也没问题。对此我没有测试,但结合个人实际状况是,对超过1024的fd进行select,问题不能马上暴露(我都一直到1500了),但可能会存在测试

相似越界访问之类的问题(segment fault)。ui

 

以前还一直想不通,一直觉得是相似ulimit的限制没有修改。但矛盾的是相同的配置,用poll/epoll写的服务端却能够测试到10K以上,如今终于了然。url

相关文章
相关标签/搜索