Russian Qt Forum
Ноябрь 24, 2024, 04:30 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QNetsocketNotifer - Segmentation fault  (Прочитано 2189 раз)
gering
Гость
« : Апрель 19, 2011, 06:21 »

Здравствуйте.
Суть такова: пытаюсь создать сетевой снифер на Qt под линуксом(archlinux) используя библиотеку libnids(оболочка для libpcap).
Если делать по примерам из библиотеки ( то есть использовать nids_run, nids_next или nids_dispatch), то все работает.
Мне же необходимо осуществлять обработку сигналов об отловленных пакетах при помощи QNetsocketNotifier наподобие того, как сделано для libpcap здесь.

сделал так:
Код
C++ (Qt)
//callback for libnids:
void NETLISTENER::tcp_callback(tcp_stream *a_tcp, void **this_time_not_needed)
{
printf("call called\n");
}
 
//Slot for qsocketnotifer:
void NETLISTENER::RecvCallback(int fd)
{
printf("recv called\n");
nids_dispatch(-1);
}
 
//In cnstructor NETLISTENER:
.....
nids_init();
.....
nids_register_tcp((void *)&NETLISTENER::tcp_callback);
.....
int fdsk = nids_getfd(); // fd >0 is In /proc/<pid>/fd.
QSocketNotifier *Notifer = new QSocketNotifier(fdsk, QSocketNotifier::Read, this );
connect(Notifer, SIGNAL(activated(int)), this, SLOT(RecvCallback(int)));
Notifer->setEnabled(true);
.....
 

Запускаю, посылаю пакет, и выполнение завершается с ошибкой "Segmentation fault" при вызове nids_dispatch(-1) в слоте.
Если вызов nids_dispatch(-1) закомментировать, то в консоль вываливается бесконечное множество сообщений "recv called".

Прошу помочь в решении проблемы.
Записан
gering
Гость
« Ответ #1 : Апрель 19, 2011, 17:58 »

Цитировать
Если вызов nids_dispatch(-1) закомментировать, то в консоль вываливается бесконечное множество сообщений "recv called".

многократный вызов происходил потому что если не считывать данные из сокета, то сигнал посылается заново.


Цитировать
Запускаю, посылаю пакет, и выполнение завершается с ошибкой "Segmentation fault" при вызове nids_dispatch(-1) в слоте.

исключение возникало при вызове внутренней функции syslog. Закомментировал ее вызов(пока временное решение), пересобрал либу и все заработало)
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.073 секунд. Запросов: 21.