pcap_loop wartet noch auf ein paket



  • 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...


Anmelden zum Antworten