Re: backlog в listen()
От: NeuroVirus Россия  
Дата: 16.09.03 06:46
Оценка: 11 (1)
Здравствуйте, nuklus, Вы писали:

N>Привет


N>Интересует, как народ выбирает параметр backlog для int listen( SOCKET s, int backlog /* maximum length of the queue of pending connections */).

N>Пишется высокопроизводительный сервер, способный принимать и поддерживать соединений, так много, насколько возможно.
N>Параметр по умолчанию SOMAXCONN (5) не устраивает, т.к. при некотором небольшом числе одновременно подключающихся клиентов, часть из них в connect() получает отказ WSAECONNREFUSED, если backlog повысить, то ситуация улучшается, но хотелось бы что-то более определенное. Есть ли возможность узнать максимальную длину очереди отложенных подключений?

как пишет Майкрософт, нет способа узнать актуальное значение длины очереди.
Если поискать в MSDN то можно найти разные максимальные значения для
параметра BackLog (для Winsock 1.1 всегда равно SOMAXCONN = 5 для совместимости с Berkley Sockets)
Цитата:

The Windows Sockets 1.1 specification indicates that the maximum allowable value for backlog is 5; however,
Microsoft® Windows NT® version 3.51 accepts a backlog of up to 100,
Microsoft® Windows NT® 4.0 Server and Windows 2000 Server accepts a backlog of 200, and
Microsoft® Windows NT® 4.0 Workstation and Windows 2000 Professional accepts a backlog of 5 (which reduces the memory footprint).

В платформах типа Win95/98/ME тоже (скорее всего) равно 5.
Кроме того в серверных платформах можно сконфигурировать
динамический backlog для противодействиям атакам типа SYN FLOOD. (искать Q142641)

Для высокопроизводительных серверов необходимо устанавливать максимальное
значение параметра BackLog и очень быстро отрабатывать accept.
Также можно выполнять accept для одного слушающего сокета в нескольких потоках.

P.S. Хотя где-то в том-же MSDN написано что при получении параметра SOMAXCONN
провайдер должен выставить максимально возможное значение, практика показывает,
что это не так.
backlog в listen()
От: nuklus  
Дата: 15.09.03 18:46
Оценка:
Привет

Интересует, как народ выбирает параметр backlog для int listen( SOCKET s, int backlog /* maximum length of the queue of pending connections */).
Пишется высокопроизводительный сервер, способный принимать и поддерживать соединений, так много, насколько возможно.
Параметр по умолчанию SOMAXCONN (5) не устраивает, т.к. при некотором небольшом числе одновременно подключающихся клиентов, часть из них в connect() получает отказ WSAECONNREFUSED, если backlog повысить, то ситуация улучшается, но хотелось бы что-то более определенное. Есть ли возможность узнать максимальную длину очереди отложенных подключений?
Re: backlog в listen()
От: Аноним  
Дата: 16.09.03 06:40
Оценка:
"Есть ли возможность узнать максимальную длину очереди отложенных подключений?" Если не ошибаюсь, то нельзя. Попробуйте поставить просто очень большое число. Если оно превысит дозволенный лимит, то и Виндоус и Юникс поставят свое максимальное значение. У Стивенса все очень хорошо описано.

Здравствуйте, nuklus, Вы писали:

N>Привет


N>Интересует, как народ выбирает параметр backlog для int listen( SOCKET s, int backlog /* maximum length of the queue of pending connections */).

N>Пишется высокопроизводительный сервер, способный принимать и поддерживать соединений, так много, насколько возможно.
N>Параметр по умолчанию SOMAXCONN (5) не устраивает, т.к. при некотором небольшом числе одновременно подключающихся клиентов, часть из них в connect() получает отказ WSAECONNREFUSED, если backlog повысить, то ситуация улучшается, но хотелось бы что-то более определенное. Есть ли возможность узнать максимальную длину очереди отложенных подключений?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.