Здравствуйте.
Суть такова: пытаюсь создать сетевой снифер на Qt используя библиотеку libnids(оболочка для libpcap).
Необходимо осуществлять обработку сигналов об отловленных пакетах при помощи QNetsocketNotifer наподобие того, как сделано для libpcap здесь.
сделал так:
//callback для libnids:
void NETLISTENER::tcp_callback(tcp_stream *a_tcp, void **this_time_not_needed)
{
printf("call called\n");
}
//Слот для qsocketnotifer:
void NETLISTENER::RecvCallback(int fd)
{
printf("recv called\n");
nids_dispatch(-1);
}
//В конструкторе класса NETLISTENER:
.....
nids_init();
.....
nids_register_tcp((void *)&NETLISTENER::tcp_callback);
.....
int fd = nids_getfd();
QSocketNotifier *Notifer = new QSocketNotifier(fd, 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».
Прошу помочь в решении проблемы.