Выберите () + UDP, приводящий к слишком многим открытым файлам

У меня в настоящее время есть выбор () оператор, настроенный для отслеживания два футбола UDP. Я отправляю, возможно, 10 - 20 сообщений в секунду в одном общем сокете данных, который является интерпретируемым, как я ожидал.

Однако, после того как я поразил приблизительно 1 024 сообщения, я получаю уведомление:

говорящий: сокет: Слишком много открытых говорящих файлов: не удалось связать сокет

Это логично мне, так как ulimit-n показывает макс. из 1 024 открытых файлов для этого пользователя. Однако, почему там все эти открытые файлы? С UDP нет никакой установленной связи, таким образом, я не полагаю, что должен закрывать сокет каждый раз (хотя, возможно, я неправ).

Какие-либо идеи?Заранее спасибо.

1
задан BSchlinker 28 June 2010 в 21:37
поделиться

2 ответа

Я думаю, что в этом случае «Слишком много открытых файлов» на самом деле означает, что вы достигли предела дескриптора файла; сетевые сокеты учитываются в этом пределе. Вы уверены, что нет ничего, скажем, в routehelper , что создает дополнительные сокеты?

На какой платформе вы работаете? Если Linux, lsof или копошение в / proc / / fd - пока он запущен, до того, как он достигнет предела - может проиллюстрировать, куда идут все fd.

Совет: не полагайтесь на то, что socket_udp_inboundALL численно больше, чем socket_udp_inboundRC - лучше явно сравнить их значения хотя бы один раз.

1
ответ дан 2 September 2019 в 23:26
поделиться

Если вы работаете в Linux, выполните strace(1) на клиенте, чтобы проверить наличие socket(2) и open(2) vs close(2) системных вызовов (попробуйте -e trace=socket,open,close). Это самый простой способ сбалансировать количество файловых дескрипторов на данный момент.

1
ответ дан 2 September 2019 в 23:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: