Nano Hash - криптовалюты, майнинг, программирование

Проблемы с прерыванием захвата с помощью libpcap

Привет, я делаю сниффер с С++ и 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)}'

01.04.2012

Ответы:


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

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

01.04.2012
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..