Какой беспорядок!Давайте создадим ответ C ++, используя документацию :
typedef std::vector <u_char*> VPack;
void handler(u_char *user, const pcap_pkthdr *h, const u_char *bytes)
{
VPack & v = *reinterpret_cast<VPack*>(user);
v.insert(v.end(), bytes, bytes + h->caplen);
}
int main()
{
VPack v;
// ... populate p ...
int result = pcap_dispatch(p, 0, handler, reinterpret_cast<uchar*>(&v));
}
. Единственное, что заслуживает внимания, это то, что мы передаем указатель на v
через аргумент user
, поэтомусделать небезопасное приведение типов на обоих концах.Это просто отличительная черта использования функции обратного вызова C.