Sto creando un programma che crea un socket RAW per leggere tutto il traffico. Tra la chiamata di socket() e recvfrom() (l'ultima è in un ciclo per estrarre tutti i pacchetti dal buffer) aspetto 5s.Perché la modifica del valore di SO_RCVBUF non funziona?
Quando eseguo il programma, invio circa 200 pacchetti con il comando hping3 in «modalità più veloce» (per riempire il buffer velocemente) al mio programma. Non appena sono trascorsi 5 secondi, il mio programma estrae circa 150 pacchetti dal buffer.
cerco di cambiare la dimensione del buffer di ricezione per ottenere un risultato migliore:
int a = 65535;
if ((setsockopt(sockfd, 0, SO_RCVBUF, &a ,sizeof(int))) < 0)
{
fprintf(stderr, "Error setting sock opts..\n");
}
Tuttavia, qualunque sia il valore di «un», 1 o 10000000, a quanto pare non cambia nulla, ho ancora ottenere ~ 150 pacchetti dal buffer.
Qual è il problema?
Modifica: il valore di «a» viene verificato con una chiamata getsockopt
.
Puoi mostrarci altro codice, comprese le chiamate rilevanti a 'socket()' ecc.? Facendoci sapere che anche il tuo sistema operativo potrebbe aiutarti. –
Certo, eseguo questo programma su Linux 3.2 a 64 bit. La chiamata a 'socket()': 'sockfd = socket (AF_INET, SOCK_RAW, IPPROTO_TCP)' – Flow