LMPX.COM |
Home | Linux | Mysql | PHP | XML | ||
|
|
|||
From: Lorenz Pfiffner Date: Mon Jun 14 09:31:22 2004 Subject: Net::Ping ICMP in threads problem
Hi there
I'm currently fighting against a strange problem. My perl script should
do parallel pinging to a scope of addresses in a subnet. The code works
fine if I use Net::Ping with UDP or TCP. But that's not a satisfying
solution. I need ICMP because of the reachability of devices. (And less
overhead)
I think that there's a problem in connection with threads. When I do it
in a sequence without threads, the result is correct as it is if I use
UDP with threads.
The problem is, that the result is completely wrong. The pings are set
up correct, I captured icmp traffic with tcpdump. Seems that there are
values, that become overwritten again and again everytime a new thread
is started.
Now I found out that when I do a sleep before I start the thread, the
answers are also ok. So if you look in the code.. if I set $sleeptime to
higher than $pingtimeout it works. But then it is like a sequence
because it waits until the thread finished and after that it starts a
new ping subroutine.
Seems that using threads causes Net::Ping to mess up something with it's
variables?
Any suggestions, ideas?
Greetings
Lorenz
-----snip-----
#!/usr/bin/perl -w
use threads;
use Net::Ping;
my $sleeptime = 0;
sub createsubnet {
push(@ipaddr, "10.0.0.1", "10.0.0.2", "10.0.0.3", "10.0.0.4",
"10.0.0.5", "10.0.0.7", "10.0.0.8", "10.0.0.9", "10.0.0.11",
"10.0.0.12", "10.0.0.13", "10.0.0.14", "10.0.0.15", "10.0.0.16",
"10.0.0.17", "10.0.0.18", "10.0.0.19", "10.0.0.20", "10.0.0.21",
"10.0.0.22" );
}
sub startping {
my $host = $_;
my $pingprotocol = "icmp";
my $pingtimeout = 1;
my $pinglength = 1;
my $p = Net::Ping->new($pingprotocol,$pingtimeout,$pinglength);
if ( $p->ping($host) ) {
print "$host OK\n";
} else {
print "$host dead\n";
}
$p->close();
}
sub startthreads {
foreach (@ipaddr) {
sleep($sleeptime);
push(@pinged_addr, threads->create("startping", $_));
}
foreach (@pinged_addr) { $_->join(); }
}
createsubnet;
startthreads;
| Navigate in group perl.libnet at sever nntp.perl.org | |
| Previous | Next |
| © No Copyright You are free to use Anything |
Site Maintained by PHP Developer
Powered By PHP Consultants |