当我使用轮询功能并将数量设置为 1000 以上时,它根本不睡觉。关于这可能是什么的任何想法。opengroup 对限制只字未提,而且我还没有耗尽我的内存空间。但是当我检查指针时,整数是负数。关于这可能是什么的任何想法?
问问题
1237 次
2 回答
1
如果poll()
返回一个负数,你应该使用perror("poll");
来显示原因。
如果原因是“无效参数”,则可能是这个原因(来自Linuxpoll()
手册页):
EINVAL
nfds值超过该 值
RLIMIT_NOFILE
。
顺便说一句,POSIX 规范也将此列为错误:
[EINVAL]
如果出现以下情况,poll() 函数将失败: ...nfds
参数大于{OPEN_MAX}
于 2011-04-10T04:55:41.183 回答
1
我的猜测是您对文件描述符的限制设置为 1024。您可以通过ulimit -n
在bash (unix) 中运行来看到这一点。对于 Windows,请参阅http://support.microsoft.com/kb/111855。如果您正在运行 linux,则可以通过修改 /etc/limits.conf(或 /etc/security/limits.conf 或类似文件)来增加该限制,例如:
* soft nofile 10240
* hard nofile 10240
请注意,更改限制后,您必须注销并重新登录才能获得新值。
于 2011-04-10T04:59:13.613 回答