【发布时间】:2018-01-08 18:39:57
【问题描述】:
我目前做的事情如下:
struct pcap_pkthdr *phdr;
const u_char *data;
pcap_next_ex(descriptor, &phdr, &data);
memcpy((void*)mybuf, phdr, sizeof(*phdr));
memcpy((void*)mybuf + sizeof(*phdr), data, phdr->len);
但我想做的是以下,即提供一个预分配的缓冲区。
u_char mybuf[2048];
pcap_next_ex(descriptor, mybuf, mybuf + 16); // 16 is size of pkthdr
由于错误的指针类型,第二个示例无论如何都不会编译,但我认为我的问题通过这种方式可以更好地理解。我正在从 10G 接口读取数据,速度非常重要。我想对代码的某些部分进行基准测试,例如,使用自己的预分配数据包缓冲区而不是 libpcap 中的隐藏分配/缓冲区。
有没有办法或 API 让 libpcap 使用预先分配的缓冲区来写入 pcap_next_ex 的结果?
【问题讨论】: