Wie erhöhe ich das TCP-Empfangsfenster für einen bestimmten Socket? - Ich weiß, wie man das für alle Sockets macht, indem ich den Registrierungsschlüssel TcpWindowSize einstelle, aber wie macht man das für einen bestimmten?
Laut MSFT-Dokumenten ist der Weg
Aufrufen der Windows Sockets-Funktion setsockopt, das den Empfang festlegt Fenster pro Socket-Basis.
Aber in setsockopt wird über SO_RCVBUF erwähnt:
Gibt den gesamten Puffer pro Socket an Platz reserviert für empfängt. Das ist unabhängig von SO_MAX_MSG_SIZE und tut dies entspricht nicht unbedingt der Größe des TCP-Empfangsfensters.
So ist es möglich? Wie?
Danke.
SO_MAX_MSG_SIZE
ist für UDP. Hier ist von MSDN :
SO_MAX_MSG_SIZE - Gibt die maximale ausgehende Nachrichtengröße für vom Protokoll unterstützte nachrichtenorientierte Sockets zurück. Hat keine Bedeutung für Stream-orientierte Sockets.
Es ist auch nicht einstellbar .
Für TCP verwenden Sie einfach SO_(SND|RCV)BUF
.
Ich bin ziemlich sicher, dass SO_RCVBUF das ist, was Sie wollen. Der erste Link besagt, dass SO_RCVBUF die höchste Priorität beim Ermitteln der TCP-Fenstergröße hat, die über die im System festgelegten Werte hinausgeht. Von der Art, wie ich es lese, denke ich, dass der zweite Teil sagt, dass die Größe von SO_RCVBUF nicht mit der Größe des Empfangsfensters des Systems übereinstimmen muss. Mit anderen Worten, es kann eine andere Größe sein, die Sie einstellen.
Sie müssen vorsichtig sein und das Ergebnis testen. Windows Vista und höher verfügen über eine intelligente Funktion zur automatischen Anpassung der Fenstergröße, die speziell die Fenstergröße so einstellt, dass sie sowohl in LANs als auch in stark frequentierten Netzwerken wie 3G und High-Loss-Netzwerken gut funktioniert. Wenn Sie die Fenstergröße selbst festlegen, wird dies überschrieben, sodass Windows die Fenstergröße nicht mehr automatisch anpassen kann. Dies kann Ihre Leistung beeinträchtigen, sollten Sie jemals über ein Netzwerk mit besonders hoher Latenz wie z. B. einem Mobilfunknetz laufen müssen.