我正在编写一个程序,创建一个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个数据包。
问题出在哪里呢?
编辑:使用 getsockopt
调用验证了 « a » 的值。
socket()
等调用?告诉我们你使用的操作系统可能也会有所帮助。 - Daniel Roethlisbergersocket()
函数:sockfd = socket(AF_INET, SOCK_RAW, IPPROTO_TCP)
。 - Flow