Hallo! Ich bin einwenig am Basteln mit der LibPcap Library um Netzwerkpakete zu versenden und zu empfangen. Wie in der Dokumentation beschrieben wartet in pcap_next() das Programm endlos auf ein nicht ankommendes Paket, obwohl beim Öffnen des Adapters eine Wartezeit von 100ms angegeben wurde. Der Text aus der Dokumentation lautet: Note that pcap_next() will, on some platforms, loop reading packets from the OS; that loop will not necessarily be terminated by a signal, so pcap_breakloop() should be used to terminate packet processing even if pcap_next() is being used. OK, das scheint normal zu sein und es gibt eine Funktion die das Problem lösen sollte. Da das aktuelle Programm aber in einer Endlosschleife irgend wo in pcap_next hängt kann ich nicht aus dem aktuellen Programm heraus beenden. Einen neuen Thread starten? Scheint laut Dokumentation auch nicht zu gehen (abgesehen davon weiss ich auch nicht wie man das in ANSI C umsetzen könnte): Note also that, in a multi-threaded application, if one thread is blocked in pcap_dispatch(), pcap_loop(), pcap_next(), or pcap_next_ex(), a call to pcap_breakloop() in a different thread will not unblock that thread; you will need to use whatever mechanism the OS provides for breaking a thread out of blocking calls in order to unblock the thread, such as thread cancellation in systems that support POSIX threads. Das wirft bei mir mehr Fragen auf als Lösungen. Hat da jemand Erfahrung damit? Es kann a nicht sein, dass ich weil kein Paket angekommen ist das ganze Programm beenden muss... Wenn also jemand das gleiche Problem und eine Lösung dazu hat, oder in einem anderen Kontext ein ähnliches Problem hatte: her mit den Tipps ;) Grüsse
Hallo! Ich hab noch mal ein bisschen über der Sache gebrütet: Mit signal(bla1, bla2) kann man ja zum Beispiel auf die Eingabe CTRL + C reagieren. Es wird dann die Funktion bla2 aufgerufen. Dort kann dann etwas damit gemacht werden. Dort könnte ich nun die oben beschriebene Funktion pcap_breakloop() aufrufen. Nun möchte ich aber, dass die Funktion bla2 nicht durch die Tastenkombination CTRL + C aufgerufen wird, sondern nach einer bestimmten Zeit. Ist dies auch möglich? Ich hoffe dass da jemand eine Antwort weiss...
mit "alarm(x)" kannst du nach X Sekunden ein Signal (SIGALRM) auslösen lassen...
Danke, das habe ich inzwischen auch gesehen, aber gibt es auch die Möglichkeit einen SIGALARM unter einer Sekunde auszulösen? Z.B. 100 ms? Es muss nicht auf die Millisekunde genau sein, aber 1 Sekunde ist definitiv zu lange...
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.