【问题标题】:Problems interrupting capture with libpcap使用 libpcap 中断捕获的问题
【发布时间】:2012-04-01 00:07:51
【问题描述】:

您好,我正在使用 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)}'

【问题讨论】:

    标签: c++ c signals libpcap


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2014-03-12
      • 2015-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-22
      • 2015-10-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多