2010-05-05 3 views
8

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

Согласно MSFT's documents, путь

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

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

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

Это возможно? Как?

Спасибо.

ответ

5

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

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

Это также невозможно установить.

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

1

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

+0

Спасибо. И есть ли способ установить SO_MAX_MSG_SIZE? – rkellerm

0

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