C: предел функции опроса

Когда я использую функцию опроса и устанавливаю количество выше 1000, оно вообще не спит. Любые идеи о том, что это может быть. opengroup ничего не говорит об ограничении, и я почти не исчерпываю память. Но когда я проверяю указатель, целое число отрицательно. Есть идеи, что это может быть?

2 ответа

Решение

Я предполагаю, что ваш предел для файловых дескрипторов установлен в 1024. Вы можете увидеть это, запустив ulimit -n в Баш (Unix). Для окон см. http://support.microsoft.com/kb/111855. Если вы работаете в linux, вы можете увеличить этот лимит, изменив /etc/limits.conf (или /etc/security/limits.conf или аналогичный), например:

*               soft    nofile  10240
*               hard    nofile  10240

Обратите внимание, что после изменения лимитов вам придется выйти и снова войти в систему, чтобы получить новые значения.

Если poll() возвращает отрицательное число, вы должны использовать perror("poll"); показать причину.

Если причина - "Неверный аргумент", это может быть по этой причине (из Linux poll() справочная страница):

EINVAL

Значение nfds превышает RLIMIT_NOFILE значение.

Кстати, спецификация POSIX также перечисляет это как ошибку:

Функция poll() должна завершиться ошибкой, если: ... [EINVAL] nfds аргумент больше чем {OPEN_MAX}

Другие вопросы по тегам