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