Увеличьте окно приема TCP для определенного сокета

Как увеличить окно приема TCP для определенного сокета? - Я знаю, как это сделать для всех сокетов, установив ключ реестра TcpWindowSize, но как это сделать для конкретного?

Согласно документам MSFT, способ

Вызов функции Windows Sockets setsockopt, которая устанавливает окно получения для каждого сокета.

Но в setsockopt упоминается SO_RCVBUF:

Указывает общее пространство буфера для каждого сокета, зарезервированное для приема. Это не связано с SO_MAX_MSG_SIZE и не обязательно соответствует размеру окна приема TCP.

Так это возможно? Как?

Спасибо.


person rkellerm    schedule 05.05.2010    source источник


Ответы (3)


SO_MAX_MSG_SIZE для UDP. Вот из MSDN:

SO_MAX_MSG_SIZE - Returns the maximum outbound message size for message-oriented sockets supported by the protocol. Has no meaning for stream-oriented sockets.

Это также не настраивается.

Для TCP просто используйте SO_(SND|RCV)BUF.

person Nikolai Fetissov    schedule 05.05.2010

Я совершенно уверен, что SO_RCVBUF — это то, что вам нужно. В первой ссылке говорится, что SO_RCVBUF имеет наивысший приоритет для определения размера окна TCP по сравнению со всем, что установлено в системе. Судя по тому, как я это читаю, я думаю, что вся вторая часть говорит о том, что размер SO_RCVBUF не обязательно должен соответствовать размеру окна приема системы. Другими словами, это может быть другой размер, который вы установили.

person Genesis    schedule 05.05.2010
comment
Спасибо. И есть ли способ установить SO_MAX_MSG_SIZE? - person rkellerm; 05.05.2010

Вы должны быть осторожны при настройке и тестировании результатов. Windows Vista и более поздние версии имеют интеллектуальную адаптивную функцию автоматической настройки размера окна, которая специально настраивает размер окна для хорошей работы как в локальных сетях, так и в длинных толстых сетях, таких как 3G и сетях с высокими потерями. Установка размера окна самостоятельно переопределит это, так что окна больше не смогут автоматически настраивать размер окна. Это может повредить вашей производительности, если вам когда-нибудь понадобится работать в сети с особенно высокой задержкой, такой как сотовая сеть.

person Stewart    schedule 06.05.2010