1

当我使用轮询功能并将数量设置为 1000 以上时,它根本不睡觉。关于这可能是什么的任何想法。opengroup 对限制只字未提,而且我还没有耗尽我的内存空间。但是当我检查指针时,整数是负数。关于这可能是什么的任何想法?

4

2 回答 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 -nbash (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 回答