Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
pcap_设置_缓冲区_大小()中的问题_C_Linux_Pcap_Libpcap - Fatal编程技术网

pcap_设置_缓冲区_大小()中的问题

pcap_设置_缓冲区_大小()中的问题,c,linux,pcap,libpcap,C,Linux,Pcap,Libpcap,我得到以下错误: gcc -Wall -lpcap sample.c -o sample 但是,如果我注释掉包含pcap\u set\u buffer\u size() 那么,pcap\u set\u buffer\u size()有什么问题 为什么它会导致pcap\u activate()失败?对于最近的64位Linux: 任何大于等于65616的缓冲区大小都可以 有关如何计算该值,请参见libpcap源中的create_ring()的实现 默认值为2*1024*1024=2097152 w

我得到以下错误:

gcc -Wall -lpcap sample.c -o sample
但是,如果我注释掉包含
pcap\u set\u buffer\u size()

那么,
pcap\u set\u buffer\u size()
有什么问题


为什么它会导致pcap\u activate()
失败?

对于最近的64位Linux:

任何大于等于65616的缓冲区大小都可以

有关如何计算该值,请参见
libpcap
源中的
create_ring()
的实现

默认值为2*1024*1024=2097152

windows上的默认缓冲区大小为1000000


更新:

要由
pcap\u set\u buffer\u size()
设置的缓冲区大小是指(环形)缓冲区,用于存储已接收的包。最佳大小取决于用例和价格合理的系统资源(不可分页内存)

请逐字查看以下关于接收缓冲区大小的声明:

到达进行捕获的数据包存储在缓冲区中,以便 不必在申请表到达时立即阅读。在…上 一些平台 缓冲区的大小可以设置;太小的大小可能意味着,如果捕获的数据包太多,并且 快照长度不限制快照的数量 如果缓冲区在应用程序读取数据包之前填满,数据包可能会被丢弃,而 太大的尺码可以使用 不可分页操作系统内存多于防止数据包被丢弃所需的内存


更新1:

无论如何,缓冲区的大小应该是为正在使用的句柄设置的最小捕捉长度,加上正确对齐缓冲区本身所需的一些字节,否则激活句柄的结果将如原始问题中所述


可以使用
pcap\u snapshot()
检索句柄的当前捕捉长度。默认快照长度为65535字节。

您在哪个平台上遇到这种行为?如何将pcap缓冲区大小更改为系统页面大小的倍数,例如
65536
而不是
65535
?@alk Ubuntu 10.10 32位Linux@HristoIliev我把它改成了65536,但还是不行。,缓冲区大小为65535会使缓冲区变小。除非您想减少有线内存量或增加丢弃数据包的数量,否则您可能不想缩小缓冲区大小。@alk和Guy Harris
是的。。。增加缓冲区大小可以解决此问题。。。我把它增加到2097152
我之所以将缓冲区大小设置为65535,是因为手册页上有一句话:“在大多数网络(如果不是所有网络)上,65535的快照长度应该足以捕获数据包中的所有可用数据。”。。。我不知道为什么我会混淆快照长度和缓冲区大小
那么,你知道32位linux机器上理想的缓冲区大小是多少吗?请参阅我的更新答案。在接收缓冲区的最佳大小方面,32位和64位linux之间不应该存在差异。我看到的唯一区别是最小可能值,因为这取决于缓冲区的对齐方式,而32位到64位操作系统的对齐方式不同@用户1512195
gcc -Wall -lpcap sample.c -o sample
-1 : PCAP_ERROR
Activate: can't mmap rx ring: Invalid argument