Проблемы с прерыванием захвата с помощью libpcap - PullRequest
3 голосов
/ 01 апреля 2012

Привет, я делаю сниффер с 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;

Я видел похожие решения для моей проблемы, такие как: Как использовать pcap_breakloop? Но я не могу скомпилировать, я получаю эту ошибку:

capture.cpp: 138: 35: ошибка: аргумент типа 'void (Capture: :) ​​(int)' не совпадает '{aka __sighandler_t void (*) (int)}'

1 Ответ

3 голосов
/ 01 апреля 2012

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

Вам придется внести некоторые изменения в ваш код, чтобы вы не зависели от переменных экземпляра.

...