Por que mudar o valor de SO_RCVBUF não funciona?

Eu estou fazendo um programa que cria um soquete RAW, a fim de ler todo o tráfego. Entre a chamada de socket () e recvfrom () (a última é em um loop para retirar todos os pacotes do buffer) aguardo 5s.

Quando executo o programa, envio cerca de 200 pacotes com o comando hping3 em "modo mais rápido" (para preencher o buffer rapidamente) para o meu programa. Assim que 5s são passados, meu programa extrai cerca de 150 pacotes do buffer.

Eu tento alterar o tamanho do buffer de recebimento para obter melhor resultado:

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

No entanto, seja qual for o valor de «a», 1 ou 10000000, parece que nada muda, ainda recebo ~ 150 pacotes do buffer.

Qual é o problema?

Editar: o valor de «a» é verificado com umgetsockopt ligar.

questionAnswers(2)

yourAnswerToTheQuestion