Знать размер очереди ожидающих подключений в GNU/Linux

В типичной реализации сетевого сервера C размер ожидающей очереди принятия может быть установлен с помощью listen. Когда новое соединение получает доход и в очереди больше места, ECONNREFUSED отправляется клиенту или запрос игнорируется.

Можно ли узнать состояние этой очереди? Это важно, потому что в демон на основе высокой нагрузки мы обнаруживаем некоторые попытки от клиента, и мы подозреваем, что эта очередь заполнена и попытки подключения игнорируются.

Спасибо заранее.

Ответ 1

в linux: /Труды/системы/нетто/ipv4/tcp_max_syn_backlog:

Максимальное количество запомненных запросов на соединение, которые до сих пор не получили подтверждения от подключения клиента.

Значение по умолчанию - 1024 для систем с памятью более 128 МБ и 128 для компьютеров с низкой памятью. Если сервер страдает перегрузкой, попробуйте увеличить это число.

/Труды/системы/нетто/ядро ​​/SOMAXCONN: Предел времени ожидания socket socket(), известного в пользовательском пространстве как SOMAXCONN. По умолчанию 128. См. Также tcp_max_syn_backlog для дополнительной настройки для сокетов TCP.

это соответствующие sysctls.. на openbsd, что я сижу сейчас, быстрый sysctl -a показывает: net.inet.ip.maxqueue = 300