crash bug之 select
来源:互联网 发布:python迭代器 编辑:程序博客网 时间:2024/06/10 04:27
crash bug之 select
在Linux内核中,select所用到的FD_SET是有限的,即内核中有个参数__FD_SETSIZE定义了每个FD_SET的句柄个数
一般定义为 1024个, 定义在/usr/include/sys/select.h或<bits/types.h>中
你会发现sizeof(fd_set)的结果是128(*8 = FD_SETSIZE=1024).
Select用到了fd_set结构,从man page里可以知道fd_set能容纳的句柄和FD_SETSIZE相
关。实际上fd_set在*nix下是一个bit标志数组,每个bit表示对应下标的fd是不是在
fd_set中。fd_set只能容纳编号小于 FD_SETSIZE的那些句柄。
FD_SETSIZE默认是1024,如果向fd_set里放入过大的句柄,宏FD_SET会引起fd_set数组越界以后程序就会垮
掉。系统默认限制了一个进程最大的句柄号不超过1024,但是可以通过ulimit -n命令
/setrlimit函数来扩大这一限制。如果不幸一个程序在FD_SETSIZE=1024的环境下编
译,运行时又遇到ulimit –n > 1024的,那就只有祈求上帝保佑不会垮掉了。
过大的句柄导致crash的解决方案有2种:
1)在程序的一个头文件中重新定义__FD_SETSIZE为一个大值(如32768), 并且保证这个头文件被每个cpp或头文件第一个包含.
如:
#include <bits/types.h>
#ifdef __FD_SETSIZE
#undef __FD_SETSIZE
#endif
#define __FD_SETSIZE 32768
2)采用poll或其他IO模型来代替select.
Ref:
FD_SETSIZE在不同操作系统中的行为(From Squid): http://blog.vckbase.com/bastet/archive/2006/07/26/21533.html
- crash bug之 select
- Instance Crash & Bug 13846531
- iOS crash bug 定位
- BUG 10008092 caused instance crash
- iOS 如何查crash bug
- crash when select fault section
- 调试经验谈-根据crash dump查找bug
- chrome 插件的一处bug crash
- iOS 捕获Crash 发送Bug邮件
- iOS 捕获Crash 发送Bug邮件
- iOS 捕获Crash 发送Bug邮件
- std::nth_element bug引起的crash问题
- 修复添加system/app应用crash bug
- Android Crash之Java Crash分析
- Android Crash之Native Crash分析
- Android Crash之Java Crash分析
- Android crash之NoClassDefFoundError
- IOS crash之NSInvalidArgumentException
- 去掉窗体的边框,并且禁止拖动改变窗体大小
- j2ee笔试题目
- servlet笔试题目
- 常用bapi函数积累中........
- jboss下配置和部署EJB简介
- crash bug之 select
- jboss学习笔记
- 几种开源SIP协议栈对比
- (轉)浅谈数据库设计技巧
- JBuilder常见问题
- weblogic转jboss实例
- Eclipse开发中的常见问题
- C#序列化之二
- 数据类型