¿Por qué cambiar el valor de SO_RCVBUF no funciona?

Estoy creando 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 búfer) Espero 5s.

Cuando ejecuto el programa, envío unos 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 hayan transcurrido 5s, mi programa extrae unos 150 paquetes del búfer.

Intento cambiar el tamaño del búfer de recepción para obtener un mejor resultado:

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

Sin embargo, cualquiera que sea el valor de «a», 1 o 10000000, parece que nada cambia, todavía obtengo ~ 150 paquetes del búfer.

¿Cuál es el problema?

Edición: El valor de «a» se verifica con unagetsockopt llamada.

Respuestas a la pregunta(2)

Su respuesta a la pregunta