From: Gurusamy Sarathy <gsar@cpan.org>
Date: Fri, 28 Apr 2000 04:48:25 +0000 (+0000)
Subject: avoid error in IO::Socket::INET when given an unknown service name
X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=83fe8690eef0dc88e00a9bce0467753c97c15c68;p=p5sagit%2Fp5-mst-13.2.git

avoid error in IO::Socket::INET when given an unknown service name
with a port number (from Brian Raven <brianr@ssprdmh01.liffe.com>)

p4raw-id: //depot/perl@5982
---

diff --git a/ext/IO/lib/IO/Socket/INET.pm b/ext/IO/lib/IO/Socket/INET.pm
index 27a3d4d..c922bf3 100644
--- a/ext/IO/lib/IO/Socket/INET.pm
+++ b/ext/IO/lib/IO/Socket/INET.pm
@@ -34,6 +34,7 @@ sub new {
 
 sub _sock_info {
   my($addr,$port,$proto) = @_;
+  my $origport = $port;
   my @proto = ();
   my @serv = ();
 
@@ -59,14 +60,14 @@ sub _sock_info {
     my $defport = $1 || undef;
     my $pnum = ($port =~ m,^(\d+)$,)[0];
 
-    if ($port =~ m,\D,) {
-      unless (@serv = getservbyname($port, $proto[0] || "")) {
-	$@ = "Bad service '$port'";
-	return;
-      }
-    }
+    @serv = getservbyname($port, $proto[0] || "")
+	if ($port =~ m,\D,);
 
     $port = $pnum || $serv[2] || $defport || undef;
+    unless (defined $port) {
+	$@ = "Bad service '$origport'";
+	return;
+    }
 
     $proto = (getprotobyname($serv[3]))[2] || undef
 	if @serv && !$proto;