2010-05-05 9 views
8

Jak zwiększyć okno odbioru TCP dla określonego gniazda? - Wiem, jak to zrobić dla wszystkich gniazd, ustawiając klucz rejestru TcpWindowSize, , ale jak to zrobić dla konkretnego?Zwiększ okno odbioru TCP dla określonego gniazda

Według MSFT's documents, droga jest

Wywołanie Gniazda systemu Windows funkcjonują setsockopt, który ustawia otrzymać okno na podstawie na gnieździe.

Jednak setsockopt, wspomniano o SO_RCVBUF:

Określa bufora łącznej przestrzeni za gniazdami zarezerwowanego dla odbiera. To jest niezwiązane z SO_MAX_MSG_SIZE i robi niekoniecznie odpowiada rozmiarowi okna odbioru TCP.

Czy to możliwe? W jaki sposób?

Dzięki.

Odpowiedz

5

SO_MAX_MSG_SIZE jest dla UDP. Oto od MSDN:

SO_MAX_MSG_SIZE - Zwraca maksymalny rozmiar wiadomości wychodzących dla gniazd zorientowanych na komunikaty obsługiwanych przez protokół. Nie ma znaczenia dla gniazd strumieniowych.

Nie można również ustawić .

Dla protokołu TCP wystarczy użyć SO_(SND|RCV)BUF.

1

Jestem dość pewny, że SO_RCVBUF jest tym, czego potrzebujesz. Pierwsze łącze mówi, że SO_RCVBUF ma najwyższy priorytet dla określenia rozmiaru okna TCP ponad wszystko, co jest ustawione w systemie. Ze sposobu, w jaki ją czytam, myślę, że cała druga część mówi, że rozmiar SO_RCVBUF nie musi się zgadzać z wielkością okna odbioru systemu. Innymi słowy, może to być inny ustawiony rozmiar.

+0

Dziękuję. A czy istnieje sposób na ustawienie SO_MAX_MSG_SIZE? – rkellerm

0

Musisz uważać, aby to dostroić i przetestować wyniki. System Windows Vista i nowszy ma funkcję inteligentnego dostosowania wielkości okna, która dostosowuje rozmiar okna, tak aby działał dobrze zarówno w sieciach LAN, jak i długich sieciach, takich jak sieci 3G i sieci o wysokiej stracie. Ustawienie samego rozmiaru okna zastąpi to, aby system Windows nie mógł automatycznie dostroić rozmiaru okna. Może to spowodować obniżenie wydajności w przypadku konieczności uruchomienia sieci o szczególnie dużym opóźnieniu, takiej jak sieć komórkowa.