Увеличьте окно приема TCP для определенного сокета - PullRequest
8 голосов
/ 05 мая 2010

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

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

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

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

Определяет общий буфер на сокет место зарезервировано для получения. Это не имеет отношения к SO_MAX_MSG_SIZE и делает не обязательно соответствовать размеру окна получения TCP.

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

Спасибо.

Ответы [ 3 ]

5 голосов
/ 05 мая 2010

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

SO_MAX_MSG_SIZE - возвращает максимальный размер исходящего сообщения для сокетов, ориентированных на сообщения, поддерживаемых протоколом. Не имеет значения для потоковых сокетов.

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

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

1 голос
/ 05 мая 2010

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

0 голосов
/ 06 мая 2010

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

...