Warum funktioniert es nicht, den Wert von SO_RCVBUF zu ändern?

Ich mache ein Programm, das einen RAW-Socket erstellt, um den gesamten Datenverkehr zu lesen. Zwischen dem Aufruf von socket () und recvfrom () (letzterer befindet sich in einer Schleife, um alle Pakete aus dem Puffer zu holen) warte ich 5s.

Wenn ich das Programm starte, sende ich ungefähr 200 Pakete mit dem Befehl hping3 im «schnelleren Modus» (um den Puffer schnell zu füllen) an mein Programm. Sobald 5s verstrichen sind, extrahiert mein Programm ungefähr 150 Pakete aus dem Puffer.

Ich versuche, die Größe des Empfangspuffers zu ändern, um ein besseres Ergebnis zu erzielen:

<code>int a = 65535;
if ( (setsockopt(sockfd, 0, SO_RCVBUF, &a ,sizeof(int)) ) < 0 )
{
    fprintf(stderr, "Error setting sock opts..\n");
}
</code>

Was auch immer der Wert von «a», 1 oder 10000000 ist, es scheint, dass sich nichts ändert. Ich erhalte immer noch ~ 150 Pakete aus dem Puffer.

Was ist das Problem?

Edit: Wert von «a» wird mit a verifiziertgetsockopt Anruf.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage