c++ - 使用 libpcap 中断捕获的问题

标签 c++ c signals libpcap

您好,我正在使用 C++ 和 libpcap 进行嗅探,我想在按下 ctrl+c 时停止捕获,这是我的代码:

void Capture::terminate_process(int s){
  pcap_breakloop(descr);
  pcap_close(descr);
}

void Capture::capturar(){
  signal(SIGINT, terminate_process);
  pcap_loop (descr, -1, mycallback, NULL);
}

在 .h 中我声明:

 pcap_t *descr;

我见过针对我的问题的类似解决方案:How to use pcap_breakloop? 但是我无法编译,我得到这个错误:

capture.cpp:138:35:错误:“void (Capture::) (int)”类型的参数与“{aka __sighandler_t void (*) (int)}”不匹配

最佳答案

signal 需要一个函数指针,您正在使用一个成员函数指针。只需将 Capture::terminate_process(int) 声明为静态即可:

class Capture {
public: 
    /* ... */
    static void Capture::terminate_process(int s);
    /* ... */
};

void Capture::terminate_process(int s){
  pcap_breakloop(descr);
  pcap_close(descr);
}
/* ... */
signal(SIGINT, &Capture::terminate_process); 

您将不得不对您的代码进行一些更改,以便您不依赖于实例变量。

关于c++ - 使用 libpcap 中断捕获的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9960813/

相关文章:

c++ - 运行 xvfb-run 返回缺少的扩展名 RANDR

c++ - 在 C++ 中高效使用 bool 值 true 和 false?

c++ - 使用时如何传递参数::AfxBeginThread(ThreadFunc, &INDEX);

c - C 中的 Bit Hack 看不懂

c - C语言的简单客户端服务器

c - C 中的连接超时

c - Kill 对信号来说是不安全的尊重 - 还有其他选择吗?

c++ - 偏导数

c - C 中 free() 的确切输出?

c++ - QObject::connect: 没有这样的信号(类名)(信号名)(atribure)