listen () максимальный размер очереди для версии Windows - PullRequest
3 голосов
/ 17 января 2011

Функция Winsock listen (socket, backlog) имеет параметр для указания размера очереди для ожидающих соединений. Программа должна передать SOMAXCONN, чтобы установить максимальный размер очереди.

Вопрос: Каков максимальный размер очереди для каждой версии Windows: 2000, XP, Vista, 7?

Спасибо!

Ссылка: listen () в библиотеке MSDN

Ответы [ 5 ]

8 голосов
/ 08 апреля 2013

Это было 5 назад на NTWS 4.0: http://support.microsoft.com/kb/127144

Я верю, что в XP все было именно так, хотя в XP трудно найти что-то конкретное от Microsoft. (По крайней мере, для меня именно так я и оказался в надежде на реальный ответ).

Быстрый Java-тест показал, что для Windows 7 Pro по умолчанию установлено значение 50, а ограничение равно 200. FWIW.

Я не уверен, почему кто-то ответил бы на это с предположением о , почему вопрос задан. Есть законные причины для того, чтобы знать фактический ответ.

Например, у вас есть программное обеспечение, в котором вы можете получить пакет запросов. Если максимальное отставание от операционной системы равно 5, вы можете отказаться от соединений, даже если откажетесь от них как можно быстрее. И отставание в 200 смягчает это. И из-за этого вы можете захотеть установить системное требование ОС, чтобы не использовать ОС с таким ограничением невыполненных работ.

0 голосов
/ 13 июня 2019

Параметр backlog функции listen (socket, backlog) ограничен SOMAXCONN.Если установлено значение SOMAXCONN, базовый поставщик услуг, отвечающий за сокет, установит максимально допустимое значение невыполненного задания 1 .

Максимальное значение на платформах Windowsбыло 2 :

  • Windows Sockets 1 определяет SOMAXCONN = 5.Winsock 1.1 был частью Windows 95 и Windows NT 3.5.
  • Windows Sockets 2 определяет SOMAXCONN = 0x7fffffff и ограничивает количество невыполненных прослушиваний большим количеством (обычно несколько сотен или более).Winsock 2.1 был надстройкой для Windows 95 и частью Windows 98, Windows NT 4.0 и всех последующих выпусков Windows.
  • Windows 8 включает расширения «RIO» (Registered IO) для Winsock.Эти расширения предназначены для уменьшения задержки сетевых приложений 3 .Макрос SOMAXCONN_HINT(N) может быть использован для установки значения отставания на большее значение, чем возможно с SOMAXCONN.Значение невыполненного задания будет N, с поправкой на диапазон (200, 65535) 1 .

Примечание :

"При вызове функции listen () в приложении Bluetooth настоятельно рекомендуется использовать гораздо меньшее значение для параметра backlog (обычно от 2 до 4), поскольку принимаются только несколько клиентских подключений.уменьшает системные ресурсы, которые выделяются для использования сокетом прослушивания. Эта же рекомендация применяется к другим сетевым приложениям, которые ожидают только нескольких клиентских подключений. " 1

Источники :

  1. функция прослушивания, документация Winsock2.h, центр разработки для Windows
  2. Журнал ожидания Winsock Listen () предлагает большеГибкость в Windows 8+
  3. Winsock, Wikipedia
0 голосов
/ 12 июня 2019

Для чего бы то ни было, по умолчанию в коде асинхронных сокетов Listen () для Visual Studio 9.0 (он же 2008) установлено значение 5. Я нашел это в c: \ Program Files \ Microsoft Visual Studio 9.0 \ VC \ atlmfc \ include \ afxsock.h: BOOL Listen(int nConnectionBacklog=5);

Также задокументировано здесь: https://docs.microsoft.com/en-us/cpp/mfc/reference/casyncsocket-class?view=vs-2019#listen

0 голосов
/ 04 апреля 2013

Я видел, что это 200 на Windows 7, но я не знаю, связано ли это с ОС или сетевые драйверы и т. Д. Могут повлиять.

Вы можете экспериментально определить это, прослушивая порт и делая множество подключений к этому порту, не принимая их, пока не закончите (затем посмотрите, сколько у вас получилось).

Если вы прислушиваетесь к совету Лена и используете AcceptEx с IOCP, вы можете в значительной степени определить для себя, насколько велик ваш резерв, предварительно вызвав его для пула ожидающих соединений. Я видел эту работу с 1600 подключениями в пуле, но, похоже, у нее тоже есть ограничение.

0 голосов
/ 17 января 2011

Чего вы надеетесь достичь, узнав ответ на этот вопрос?

Существует множество способов улучшить производительность приема соединений, вам следует сосредоточиться на этом, а не на том, что может реально число соединений в очереди.be.

Журнал ожидания прослушивания должен просто учитывать кратковременные расхождения между скоростью, с которой серверное программное обеспечение может принимать новые соединения, и скоростью, с которой эти новые соединения приходят.Вы должны стремиться к тому, чтобы ваш сервер мог принимать новые соединения с подходящей скоростью, в идеале, используя AcceptEx() с IOCP для перекрывающихся вызовов на прием и публикуя подходящее количество перекрывающихся приемов при запуске сервера, а затем добавляя их по мере установления соединений.

Я говорю об этом в моем блоге, здесь и здесь .

...