summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul "LeoNerd" Evans <leonerd@leonerd.org.uk>2011-01-04 17:04:47 +0000
committerJesse Vincent <jesse@bestpractical.com>2011-01-05 15:08:17 +0800
commit2a59724c16c204887061581e901136a397ef2329 (patch)
treeadb32a7e7d9b8c58ee4925eddcb86e6dfe1bcda7
parentfd74a741eea953100482ff8901bef5b8759d2e59 (diff)
downloadperl-2a59724c16c204887061581e901136a397ef2329.tar.gz
Support emulation of AI_NUMERICSERV even though it's not strictly RFC 2553, because most OSes support it anyway, and it's easy to do
-rw-r--r--ext/Socket/Socket.pm5
1 files changed, 5 insertions, 0 deletions
diff --git a/ext/Socket/Socket.pm b/ext/Socket/Socket.pm
index 6e0f95b561..a34fa773ef 100644
--- a/ext/Socket/Socket.pm
+++ b/ext/Socket/Socket.pm
@@ -596,6 +596,9 @@ if( !defined &getaddrinfo ) {
AI_PASSIVE => 1,
AI_CANONNAME => 2,
AI_NUMERICHOST => 4,
+ # RFC 2553 doesn't define this but Linux does - lets be nice and
+ # provide it since we can
+ AI_NUMERICSERV => 1024,
EAI_BADFLAGS => -1,
EAI_NONAME => -2,
@@ -663,6 +666,7 @@ sub fake_getaddrinfo
my $flag_passive = $flags & AI_PASSIVE(); $flags &= ~AI_PASSIVE();
my $flag_canonname = $flags & AI_CANONNAME(); $flags &= ~AI_CANONNAME();
my $flag_numerichost = $flags & AI_NUMERICHOST(); $flags &= ~AI_NUMERICHOST();
+ my $flag_numericserv = $flags & AI_NUMERICSERV(); $flags &= ~AI_NUMERICSERV();
$flags == 0 or return fake_makeerr( EAI_BADFLAGS() );
@@ -689,6 +693,7 @@ sub fake_getaddrinfo
}
if( $service ne "" and $service !~ m/^\d+$/ ) {
+ return fake_makeerr( EAI_NONAME() ) if( $flag_numericserv );
getservbyname( $service, $protname ) or return fake_makeerr( EAI_SERVICE() );
}