diff options
author | Paul "LeoNerd" Evans <leonerd@leonerd.org.uk> | 2011-01-04 17:04:47 +0000 |
---|---|---|
committer | Jesse Vincent <jesse@bestpractical.com> | 2011-01-05 15:08:17 +0800 |
commit | 2a59724c16c204887061581e901136a397ef2329 (patch) | |
tree | adb32a7e7d9b8c58ee4925eddcb86e6dfe1bcda7 /ext | |
parent | fd74a741eea953100482ff8901bef5b8759d2e59 (diff) | |
download | perl-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
Diffstat (limited to 'ext')
-rw-r--r-- | ext/Socket/Socket.pm | 5 |
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() ); } |