Estoy haciendo un programa que crea un socket RAW para leer todo el tráfico. Entre la llamada de socket() y recvfrom() (la última está en un bucle para sacar todos los paquetes del buffer) espero 5s.¿Por qué cambiar el valor de SO_RCVBUF no funciona?
Cuando ejecuto el programa, envío alrededor de 200 paquetes con el comando hping3 en «modo más rápido» (para completar el búfer rápidamente) a mi programa. Tan pronto como 5s hayan transcurrido, mi programa extraerá aproximadamente 150 paquetes del buffer.
trato de cambiar el tamaño del búfer de recepción para obtener un mejor resultado:
int a = 65535;
if ((setsockopt(sockfd, 0, SO_RCVBUF, &a ,sizeof(int))) < 0)
{
fprintf(stderr, "Error setting sock opts..\n");
}
Sin embargo, cualquiera que sea el valor de «a», 1 ó 10000000, parece que nada cambia, sigo teniendo ~ 150 paquetes del buffer.
¿Cuál es el problema?
Editar: El valor de «a» se verifica con una llamada getsockopt
.
¿Puede mostrarnos más código, incluidas las llamadas relevantes a 'socket()', etc.? También nos puede ayudar saber su sistema operativo. –
Claro, ejecuto este programa bajo Linux 3.2 64bits. La llamada a 'socket()': 'sockfd = socket (AF_INET, SOCK_RAW, IPPROTO_TCP)' – Flow