Параметр сокета прослушивания сокетов, как определить это значение?

Как определить, что использовать для параметра backlog для прослушивания? Не стоит ли просто указывать очень большое число?

Ответ 1

Из docs:

Значение для отставания SOMAXCONN - это специальная константа, которая инструктирует основного поставщика услуг, ответственного за сокет s, установить максимальную допустимую величину длины ожидающих соединений.

Ответ 2

Там очень длинный ответ на этот вопрос в часто задаваемые вопросы Winsock Programmer. В нем подробно описывается стандартная настройка, а функция динамического отставания добавлена ​​в исправление для NT 4.0.

Ответ 3

Я использую SOMAXCONN, если у вас нет конкретной причины использовать короткую очередь.

Имейте в виду, что если в очереди нет нового соединения, RST не будет отправлено, что позволит клиенту автоматически продолжить попытку подключения путем повторной передачи SYN.

Кроме того, аргумент backlog может иметь разные значения в разных реализациях сокетов.

  • В большинстве случаев это означает размер полуоткрытой очереди подключений, в некоторых это означает размер завершенной очереди соединений.
  • Во многих реализациях аргумент backlog будет умножаться, чтобы получить другую длину очереди.
  • Если задано значение, которое слишком велико, все реализации будут равномерно обрезать значение до максимальной длины очереди.

Ответ 4

В качестве предупреждения для любого, кто использует boost asio, значение SOMAXCONN используется как 5 с boost.