Thanks for that hint.
I now use IO::Interface to get my local ppp0 ip-address:
use IO::Socket;
use IO::Interface qw(:flags);
sub get_local_addr {
my $if = shift;
my $s = IO::Socket::INET->new(Proto => 'udp');
unless ($s->if_flags($if) & IFF_RUNNING) {
return undef;
} else {
return $s->if_addr($if);
}
}
and then in my script I test, if the ip-address of the ppp0 interface changed:
use Net::Ping;
my $addr = get_local_addr("ppp0");
unless(defined $addr) {
die "I'm offline\n";
}
while (1) {
my $p = Net::Ping->new(udp);
if $p->ping($host) {
print "success\n";
} else {
print "failed\n";
my $cur_addr = get_local_addr("ppp0");
if ($addr ne $cur_addr) {
die "I'm offline\n";
}
}
undef $p;
sleep 3;
}
There's no need to restart the script, because it will get started by my if-up script.