summaryrefslogtreecommitdiff
path: root/lib/Net
diff options
context:
space:
mode:
authorGisle Aas <gisle@aas.no>2005-06-03 02:17:44 -0700
committerRafael Garcia-Suarez <rgarciasuarez@gmail.com>2005-06-03 21:07:03 +0000
commit46b9c7d8ea33b68703894b17914aea032e1c7b83 (patch)
tree24f5902205af5adbe92ee51b7a4bf46e347f3b3f /lib/Net
parent84bda14a8c85ec8b0c8842a9a3367471372735ce (diff)
downloadperl-46b9c7d8ea33b68703894b17914aea032e1c7b83.tar.gz
Re: [PATCH] Improved ICMP_UNREACHABLE handling in Net::Ping
Message-ID: <lry89rfm8n.fsf_-_@caliper.activestate.com> p4raw-id: //depot/perl@24699
Diffstat (limited to 'lib/Net')
-rw-r--r--lib/Net/Ping.pm21
1 files changed, 12 insertions, 9 deletions
diff --git a/lib/Net/Ping.pm b/lib/Net/Ping.pm
index 05fd69d492..e989261933 100644
--- a/lib/Net/Ping.pm
+++ b/lib/Net/Ping.pm
@@ -16,7 +16,7 @@ use Carp;
@ISA = qw(Exporter);
@EXPORT = qw(pingecho);
-$VERSION = "2.31_01";
+$VERSION = "2.31_02";
sub SOL_IP { 0; };
sub IP_TOS { 1; };
@@ -395,12 +395,13 @@ sub ping_external {
return Net::Ping::External::ping(ip => $ip, timeout => $timeout);
}
-use constant ICMP_ECHOREPLY => 0; # ICMP packet types
-use constant ICMP_ECHO => 8;
-use constant ICMP_STRUCT => "C2 n3 A"; # Structure of a minimal ICMP packet
-use constant SUBCODE => 0; # No ICMP subcode for ECHO and ECHOREPLY
-use constant ICMP_FLAGS => 0; # No special flags for send or recv
-use constant ICMP_PORT => 0; # No port with ICMP
+use constant ICMP_ECHOREPLY => 0; # ICMP packet types
+use constant ICMP_UNREACHABLE => 3; # ICMP packet types
+use constant ICMP_ECHO => 8;
+use constant ICMP_STRUCT => "C2 n3 A"; # Structure of a minimal ICMP packet
+use constant SUBCODE => 0; # No ICMP subcode for ECHO and ECHOREPLY
+use constant ICMP_FLAGS => 0; # No special flags for send or recv
+use constant ICMP_PORT => 0; # No port with ICMP
sub ping_icmp
{
@@ -478,10 +479,12 @@ sub ping_icmp
$self->{"from_subcode"} = $from_subcode;
if (($from_pid == $self->{"pid"}) && # Does the packet check out?
($from_seq == $self->{"seq"})) {
- if ($from_type == ICMP_ECHOREPLY){
+ if ($from_type == ICMP_ECHOREPLY) {
$ret = 1;
+ $done = 1;
+ } elsif ($from_type == ICMP_UNREACHABLE) {
+ $done = 1;
}
- $done = 1;
}
} else { # Oops, timed out
$done = 1;