catch term signal even if no packet matching the filter arrives
authorMatthias Förste foerste@schlittermann.de
Mon, 15 Aug 2011 13:53:32 +0200
changeset 23 1c208b4d0a79
parent 22 46636ca4f3b0
child 24 6c4ec099c4a8
catch term signal even if no packet matching the filter arrives
dns-autoslave
--- a/dns-autoslave	Fri Aug 12 15:13:51 2011 +0200
+++ b/dns-autoslave	Mon Aug 15 13:53:32 2011 +0200
@@ -8,6 +8,7 @@
 use Net::DNS::Packet;
 use Fcntl ":flock";
 use AppConfig;
+use POSIX qw(SIGTERM);
 
 # Es kommen Zeilen
 # add slave domain.com
@@ -78,10 +79,14 @@
 	exit 0;
     }
 
-    $SIG{TERM} = sub { warn "Exit.\n"; unlink $Cf->pid; exit 0; };
+    POSIX::sigaction(SIGTERM, POSIX::SigAction->new(sub { Net::Pcap::breakloop($pcap); } ))
+	    or die "Error setting SIGTERM Handler: $!\n";
     close(STDIN); close(STDOUT); close(STDERR); close(PID);
     $0 = ME." [capturing]";
     Net::Pcap::loop($pcap, -1, \&process, undef);
+    warn "Exit.\n";
+    unlink $Cf->pid;
+    exit 0;
 }