2012-04-01 64 views
3

嗨,我是在做一個用C++嗅探和libpcap的,我想,當我按Ctrl + C停止捕獲,這是我的代碼:問題中斷捕捉與libpcap的

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? 但我不能編譯,我得到這個錯誤:

帽ture.cpp:138:35:error:參數的類型爲'void(Capture::)(int)'不匹配'{aka __sighandler_t void(*)(int)}'

回答

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

你將不得不作出一些改變你的代碼,這樣你不依賴於實例變量,但。