使用libpcap中断捕获的问题

时间:2012-04-01 00:07:51

标签: 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)}'不匹配

1 个答案:

答案 0 :(得分:3)

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); 

您必须对代码进行一些更改,以便不依赖实例变量。