Ich mache ein Programm, das einen RAW-Socket erstellt, um den gesamten Verkehr zu lesen. Zwischen dem Aufruf von socket() und recvfrom() (der letzte ist in einer Schleife, um alle Pakete aus dem Puffer zu bekommen) warte ich 5s.Warum ändert sich der Wert von SO_RCVBUF nicht?
Wenn ich das Programm ausführen, sende ich etwa 200 Pakete mit hping3 Befehl im «schnelleren Modus» (um den Puffer schnell füllen) zu meinem Programm. Sobald 5s verstrichen sind, extrahiert mein Programm etwa 150 Pakete aus dem Puffer.
Ich versuche, die Größe des Empfangspuffers zu ändern, um bessere Ergebnisse zu erhalten:
int a = 65535;
if ((setsockopt(sockfd, 0, SO_RCVBUF, &a ,sizeof(int))) < 0)
{
fprintf(stderr, "Error setting sock opts..\n");
}
jedoch, was auch immer der Wert von «a», 1 oder 10 Millionen, so scheint es ändert sich nichts, ich bekomme immer noch ~ 150 Pakete aus dem Puffer.
Was ist das Problem?
Edit: Wert von «a» wird mit einem getsockopt
Aufruf verifiziert.
Können Sie uns mehr Code zeigen, einschließlich relevanter Aufrufe von 'socket()' usw.? Informieren Sie uns auch über Ihr Betriebssystem. –
Sicher, ich führe dieses Programm unter Linux 3.2 64bits. Der Aufruf von 'socket()': 'sockfd = socket (AF_INET, SOCK_RAW, IPPROTO_TCP)' – Flow