Здравствуйте.
Суть такова: пытаюсь создать сетевой снифер на 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".
Прошу помочь в решении проблемы.