Как определить, что использовать для параметра backlog для прослушивания? Не стоит ли просто указывать очень большое число?
Параметр сокета прослушивания сокетов, как определить это значение?
Ответ 1
Из docs:
Значение для отставания SOMAXCONN - это специальная константа, которая инструктирует основного поставщика услуг, ответственного за сокет s, установить максимальную допустимую величину длины ожидающих соединений.
Ответ 2
Там очень длинный ответ на этот вопрос в часто задаваемые вопросы Winsock Programmer. В нем подробно описывается стандартная настройка, а функция динамического отставания добавлена в исправление для NT 4.0.
Ответ 3
Я использую SOMAXCONN, если у вас нет конкретной причины использовать короткую очередь.
Имейте в виду, что если в очереди нет нового соединения, RST не будет отправлено, что позволит клиенту автоматически продолжить попытку подключения путем повторной передачи SYN.
Кроме того, аргумент backlog может иметь разные значения в разных реализациях сокетов.
- В большинстве случаев это означает размер полуоткрытой очереди подключений, в некоторых это означает размер завершенной очереди соединений.
- Во многих реализациях аргумент backlog будет умножаться, чтобы получить другую длину очереди.
- Если задано значение, которое слишком велико, все реализации будут равномерно обрезать значение до максимальной длины очереди.
Ответ 4
В качестве предупреждения для любого, кто использует boost asio, значение SOMAXCONN используется как 5 с boost.