T
Hallo ich benutze libpcap (0.9.8) unter linux (2.6.23-gentoo-r3). Ich habe einen Thread der in pcap_loop() geht und dort auf bestimmte Pakete lauscht.
Wenn ich das Programm beende wird breakloop() benutzt und anschließend darauf gewartet(join), dass der Thread (der in pcap_loop() hängt) endet. Dann endet pcap_loop(), der Thread endet (durch Codeende) und fertig ist die Laube.
Ich habe allerdings feststellen müssen, dass pcap_loop nach der Benutzung von pcap_breakloop erst dann beendet, wenn noch ein Packet angekommen ist. Das finde ich nicht so prall... Irgendjemand eine Idee?
// gekürzt
/* thread */
pcap_open_live (base->device, BUFSIZ, 1, 1000, errbuf);
pcap_compile (base->T_gather_handle, &com_filter, filter, 0, net);
pcap_setfilter (base->T_gather_handle, &com_filter);
pcap_freecode(&com_filter);
pcap_loop (base->T_gather_handle, -1, &incoming,
(u_char *) dh);
/* main */
pcap_breakloop (tinfo.T_gather_handle);
pthread_join(this->thread_gather,NULL);
// hier wird dann gewartet, weil der thread nich pcap_loop() verlässt
Ich spiele mit dem Gedanken einfach selbst vorher noch nen Packet loszujagen, aber das ich mir irgendwie zu work-around-mäßig unsauber...