Frage

Ich arbeite mit einer Linux-Box läuft 2.6.9-55.ELsmp, x86_64.

Ich versuche, die TCP einstellen Empfangsfenster durch die setsockopt () Funktion mit C. Ich versuche, die folgenden:

rwnd = 1024;
setsockopt(sock, SOL_SOCKET, SO_RCVBUF, (char *)&rwnd, sizeof(rwnd));

Das Codesegment oben ist in einem Client-Programm, das Daten von einem Server empfängt. Wenn ich das Programm beginnen zu empfangen und tcpdump Ausgang beobachtet, beobachte ich Fenster Verhandlung wie folgt:

11:34:40.257755 IP clientReceiver.42464 > serverSender.8991: 
S 1742042788:1742042788(0) win 5840 
<mss 1460,sackOK,timestamp 1688222886 0,nop,wscale 2>

Wir sehen, dass das Client-Programm ist in der Tat ein Fenster anders verhandelt, was ich in dem Client-Programm eingestellt habe. Doch aus wie kann ich Steven Text ( „TCP / IP Illustrated, Volume 1“) Abschnitt 20.4, interpretiere ich glaube, Sie bewirken, was er bezieht sich auf im zweiten Block Zitat in Abschnitt 20.4 mit dem setsockopt () nenne ich (siehe oben ).

Ich mag an würde verstehen, wo ich falsch gegangen sind.

Vielleicht ist meine Interpretation dessen, was Stevens sagt, ist falsch. In diesem Fall könnten Sie mich auf den richtigen Weg weisen der Einstellung der Puffergröße erhalten? Als Beweis meiner Verwirrung, verweise ich die Linux TCP-Sockets-man-Seite unter http: //linux.die .net / Mann / 7 / tcp (siehe Kommentar auf SO_RCFBUF).

Was soll ich in dieser Geschichte fehlt? Wie steuere ich die Puffergröße empfangen (und es in der tcpdump Ausgang zeigen haben)? Bitte beachten Sie, dass ich anspielen eine Einstellung der Socket-Option SO_RCFBUF Hierher - Ich verstehe, dass das, was in der SYN im Fenster Verhandlung erscheint

.

Jede Eingabe wird geschätzt.

War es hilfreich?

Lösung

Sie müssen auch TCP_WINDOW_CLAMP verwenden

rcvbuf = 2048;
setsockopt(sock, SOL_SOCKET, SO_RCVBUF, (char *)& rcvbuf, sizeof(rcvbuf));
clamp = 1024;
setsockopt(sock, SOL_SOCKET, TCP_WINDOW_CLAMP, (char *)& clamp, sizeof(clamp));

Beachten Sie die rcvbuf ist das Doppelte der Klemme, könnte es mehr sein. Sie können es die Fensterklemme lassen Autotune, wird immer noch funktionieren. Dies ist nicht tragbar.

Andere Tipps

Die Puffergröße empfangen kann nur verringert werden, bevor Sie die Steckdose anschließen - Sie können es jederzeit erhöhen kann. Welche Reihenfolge Sie anrufen sockopt () in Bezug auf connect ()?

Für TCP, der RWND Wert ist während recv weitergegeben werden.

recv (Socke, buf, RWND, 0);

Dies soll erhalten 1024 Byte.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top