我正在制作一个创建 RAW 套接字以读取所有流量的程序。在调用 socket() 和 recvfrom() 之间(最后一个在循环中以从缓冲区中取出所有数据包)我等待 5 秒。
当我运行程序时,我用“更快模式”(快速填充缓冲区)的 hping3 命令向我的程序发送了大约 200 个数据包。5 秒过后,我的程序会从缓冲区中提取大约 150 个数据包。
我尝试更改接收缓冲区的大小以获得更好的结果:
int a = 65535;
if ( (setsockopt(sockfd, 0, SO_RCVBUF, &a ,sizeof(int)) ) < 0 )
{
fprintf(stderr, "Error setting sock opts..\n");
}
然而,无论 «a » 的值是 1 还是 10000000,似乎都没有任何变化,我仍然从缓冲区中获得约 150 个数据包。
有什么问题?
编辑:« a » 的值通过getsockopt
调用进行验证。