This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Update Socket from 2.036 to 2.037
[perl5.git] / cpan / Socket / Socket.pm
index 6b01256..81a99f8 100644 (file)
@@ -1,9 +1,9 @@
 package Socket;
 
+use v5.6.1;
 use strict;
-{ use v5.6.1; }
 
-our $VERSION = '2.036';
+our $VERSION = '2.037';
 
 =head1 NAME
 
@@ -16,17 +16,17 @@ family of modules. The following examples demonstrate some low-level uses but
 a practical program would likely use the higher-level API provided by
 C<IO::Socket> or similar instead.
 
- use Socket qw(PF_INET SOCK_STREAM pack_sockaddr_in inet_aton);
   use Socket qw(PF_INET SOCK_STREAM pack_sockaddr_in inet_aton);
 
- socket(my $socket, PF_INET, SOCK_STREAM, 0)
-     or die "socket: $!";
   socket(my $socket, PF_INET, SOCK_STREAM, 0)
+        or die "socket: $!";
 
- my $port = getservbyname "echo", "tcp";
- connect($socket, pack_sockaddr_in($port, inet_aton("localhost")))
-     or die "connect: $!";
   my $port = getservbyname "echo", "tcp";
   connect($socket, pack_sockaddr_in($port, inet_aton("localhost")))
+        or die "connect: $!";
 
- print $socket "Hello, world!\n";
- print <$socket>;
   print $socket "Hello, world!\n";
   print <$socket>;
 
 See also the L</EXAMPLES> section.
 
@@ -52,9 +52,9 @@ characters in your programs, then use the constants provided here. They are
 not exported by default, but can be imported individually, and with the
 C<:crlf> export tag:
 
- use Socket qw(:DEFAULT :crlf);
   use Socket qw(:DEFAULT :crlf);
 
- $sock->print("GET / HTTP/1.0$CRLF");
   $sock->print("GET / HTTP/1.0$CRLF");
 
 The entire getaddrinfo() subsystem can be exported using the tag C<:addrinfo>;
 this exports the getaddrinfo() and getnameinfo() functions, and all the
@@ -92,7 +92,7 @@ of the C<SO_TYPE> socket option.
 Linux-specific shortcuts to specify the C<O_NONBLOCK> and C<FD_CLOEXEC> flags
 during a C<socket(2)> call.
 
- socket( my $sockh, PF_INET, SOCK_DGRAM|SOCK_NONBLOCK, 0 )
   socket( my $sockh, PF_INET, SOCK_DGRAM|SOCK_NONBLOCK, 0 )
 
 =head2 SOL_SOCKET
 
@@ -564,32 +564,32 @@ The getaddrinfo() function converts a hostname and a service name into a list
 of structures, each containing a potential way to connect() to the named
 service on the named host.
 
- use IO::Socket;
- use Socket qw(SOCK_STREAM getaddrinfo);
   use IO::Socket;
   use Socket qw(SOCK_STREAM getaddrinfo);
 
- my %hints = (socktype => SOCK_STREAM);
- my ($err, @res) = getaddrinfo("localhost", "echo", \%hints);
- die "Cannot getaddrinfo - $err" if $err;
   my %hints = (socktype => SOCK_STREAM);
   my ($err, @res) = getaddrinfo("localhost", "echo", \%hints);
   die "Cannot getaddrinfo - $err" if $err;
 
- my $sock;
   my $sock;
 
- foreach my $ai (@res) {
-     my $candidate = IO::Socket->new();
   foreach my $ai (@res) {
+        my $candidate = IO::Socket->new();
 
-     $candidate->socket($ai->{family}, $ai->{socktype}, $ai->{protocol})
-         or next;
+        $candidate->socket($ai->{family}, $ai->{socktype}, $ai->{protocol})
+            or next;
 
-     $candidate->connect($ai->{addr})
-         or next;
+        $candidate->connect($ai->{addr})
+            or next;
 
-     $sock = $candidate;
-     last;
- }
+        $sock = $candidate;
+        last;
   }
 
- die "Cannot connect to localhost:echo" unless $sock;
   die "Cannot connect to localhost:echo" unless $sock;
 
- $sock->print("Hello, world!\n");
- print <$sock>;
   $sock->print("Hello, world!\n");
   print <$sock>;
 
 Because a list of potential candidates is returned, the C<while> loop tries
 each in turn until it finds one that succeeds both the socket() and connect()
@@ -606,26 +606,26 @@ The getnameinfo() function converts a socket address, such as returned by
 getsockname() or getpeername(), into a pair of human-readable strings
 representing the address and service name.
 
- use IO::Socket::IP;
- use Socket qw(getnameinfo);
   use IO::Socket::IP;
   use Socket qw(getnameinfo);
 
- my $server = IO::Socket::IP->new(LocalPort => 12345, Listen => 1) or
-     die "Cannot listen - $@";
   my $server = IO::Socket::IP->new(LocalPort => 12345, Listen => 1) or
+        die "Cannot listen - $@";
 
- my $socket = $server->accept or die "accept: $!";
   my $socket = $server->accept or die "accept: $!";
 
- my ($err, $hostname, $servicename) = getnameinfo($socket->peername);
- die "Cannot getnameinfo - $err" if $err;
   my ($err, $hostname, $servicename) = getnameinfo($socket->peername);
   die "Cannot getnameinfo - $err" if $err;
 
- print "The peer is connected from $hostname\n";
   print "The peer is connected from $hostname\n";
 
 Since in this example only the hostname was used, the redundant conversion of
 the port number into a service name may be omitted by passing the
 C<NIx_NOSERV> flag.
 
- use Socket qw(getnameinfo NIx_NOSERV);
   use Socket qw(getnameinfo NIx_NOSERV);
 
- my ($err, $hostname) = getnameinfo($socket->peername, 0, NIx_NOSERV);
   my ($err, $hostname) = getnameinfo($socket->peername, 0, NIx_NOSERV);
 
 This function performs the work of the legacy functions unpack_sockaddr_in(),
 inet_ntoa(), gethostbyaddr() and getservbyport().
@@ -638,17 +638,17 @@ To turn a hostname into a human-readable plain IP address use getaddrinfo()
 to turn the hostname into a list of socket structures, then getnameinfo() on
 each one to make it a readable IP address again.
 
- use Socket qw(:addrinfo SOCK_RAW);
   use Socket qw(:addrinfo SOCK_RAW);
 
- my ($err, @res) = getaddrinfo($hostname, "", {socktype => SOCK_RAW});
- die "Cannot getaddrinfo - $err" if $err;
   my ($err, @res) = getaddrinfo($hostname, "", {socktype => SOCK_RAW});
   die "Cannot getaddrinfo - $err" if $err;
 
- while( my $ai = shift @res ) {
-     my ($err, $ipaddr) = getnameinfo($ai->{addr}, NI_NUMERICHOST, NIx_NOSERV);
-     die "Cannot getnameinfo - $err" if $err;
   while( my $ai = shift @res ) {
+        my ($err, $ipaddr) = getnameinfo($ai->{addr}, NI_NUMERICHOST, NIx_NOSERV);
+        die "Cannot getnameinfo - $err" if $err;
 
-     print "$ipaddr\n";
- }
+        print "$ipaddr\n";
   }
 
 The C<socktype> hint to getaddrinfo() filters the results to only include one
 socket type and protocol. Without this most OSes return three combinations,
@@ -665,19 +665,19 @@ and inet_ntoa().
 The many C<SO_*> and other constants provide the socket option names for
 getsockopt() and setsockopt().
 
- use IO::Socket::INET;
- use Socket qw(SOL_SOCKET SO_RCVBUF IPPROTO_IP IP_TTL);
   use IO::Socket::INET;
   use Socket qw(SOL_SOCKET SO_RCVBUF IPPROTO_IP IP_TTL);
 
- my $socket = IO::Socket::INET->new(LocalPort => 0, Proto => 'udp')
-     or die "Cannot create socket: $@";
   my $socket = IO::Socket::INET->new(LocalPort => 0, Proto => 'udp')
+        or die "Cannot create socket: $@";
 
- $socket->setsockopt(SOL_SOCKET, SO_RCVBUF, 64*1024) or
-     die "setsockopt: $!";
   $socket->setsockopt(SOL_SOCKET, SO_RCVBUF, 64*1024) or
+        die "setsockopt: $!";
 
- print "Receive buffer is ", $socket->getsockopt(SOL_SOCKET, SO_RCVBUF),
-     " bytes\n";
   print "Receive buffer is ", $socket->getsockopt(SOL_SOCKET, SO_RCVBUF),
+        " bytes\n";
 
- print "IP TTL is ", $socket->getsockopt(IPPROTO_IP, IP_TTL), "\n";
   print "IP TTL is ", $socket->getsockopt(IPPROTO_IP, IP_TTL), "\n";
 
 As a convenience, L<IO::Socket>'s setsockopt() method will convert a number
 into a packed byte buffer, and getsockopt() will unpack a byte buffer of the
@@ -707,114 +707,114 @@ our @ISA = qw(Exporter);
 # List re-ordered to match documentation above. Try to keep the ordering
 # consistent so it's easier to see which ones are or aren't documented.
 our @EXPORT = qw(
-       PF_802 PF_AAL PF_APPLETALK PF_CCITT PF_CHAOS PF_CTF PF_DATAKIT
-       PF_DECnet PF_DLI PF_ECMA PF_GOSIP PF_HYLINK PF_IMPLINK PF_INET PF_INET6
-       PF_ISO PF_KEY PF_LAST PF_LAT PF_LINK PF_MAX PF_NBS PF_NIT PF_NS PF_OSI
-       PF_OSINET PF_PUP PF_ROUTE PF_SNA PF_UNIX PF_UNSPEC PF_USER PF_WAN
-       PF_X25
+    PF_802 PF_AAL PF_APPLETALK PF_CCITT PF_CHAOS PF_CTF PF_DATAKIT
+    PF_DECnet PF_DLI PF_ECMA PF_GOSIP PF_HYLINK PF_IMPLINK PF_INET PF_INET6
+    PF_ISO PF_KEY PF_LAST PF_LAT PF_LINK PF_MAX PF_NBS PF_NIT PF_NS PF_OSI
+    PF_OSINET PF_PUP PF_ROUTE PF_SNA PF_UNIX PF_UNSPEC PF_USER PF_WAN
+    PF_X25
 
-       AF_802 AF_AAL AF_APPLETALK AF_CCITT AF_CHAOS AF_CTF AF_DATAKIT
-       AF_DECnet AF_DLI AF_ECMA AF_GOSIP AF_HYLINK AF_IMPLINK AF_INET AF_INET6
-       AF_ISO AF_KEY AF_LAST AF_LAT AF_LINK AF_MAX AF_NBS AF_NIT AF_NS AF_OSI
-       AF_OSINET AF_PUP AF_ROUTE AF_SNA AF_UNIX AF_UNSPEC AF_USER AF_WAN
-       AF_X25
+    AF_802 AF_AAL AF_APPLETALK AF_CCITT AF_CHAOS AF_CTF AF_DATAKIT
+    AF_DECnet AF_DLI AF_ECMA AF_GOSIP AF_HYLINK AF_IMPLINK AF_INET AF_INET6
+    AF_ISO AF_KEY AF_LAST AF_LAT AF_LINK AF_MAX AF_NBS AF_NIT AF_NS AF_OSI
+    AF_OSINET AF_PUP AF_ROUTE AF_SNA AF_UNIX AF_UNSPEC AF_USER AF_WAN
+    AF_X25
 
-       SOCK_DGRAM SOCK_RAW SOCK_RDM SOCK_SEQPACKET SOCK_STREAM
+    SOCK_DGRAM SOCK_RAW SOCK_RDM SOCK_SEQPACKET SOCK_STREAM
 
-       SOL_SOCKET
+    SOL_SOCKET
 
-       SO_ACCEPTCONN SO_ATTACH_FILTER SO_BACKLOG SO_BROADCAST SO_CHAMELEON
-       SO_DEBUG SO_DETACH_FILTER SO_DGRAM_ERRIND SO_DOMAIN SO_DONTLINGER
-       SO_DONTROUTE SO_ERROR SO_FAMILY SO_KEEPALIVE SO_LINGER SO_OOBINLINE
-       SO_PASSCRED SO_PASSIFNAME SO_PEERCRED SO_PROTOCOL SO_PROTOTYPE
-       SO_RCVBUF SO_RCVLOWAT SO_RCVTIMEO SO_REUSEADDR SO_REUSEPORT
-       SO_SECURITY_AUTHENTICATION SO_SECURITY_ENCRYPTION_NETWORK
-       SO_SECURITY_ENCRYPTION_TRANSPORT SO_SNDBUF SO_SNDLOWAT SO_SNDTIMEO
-       SO_STATE SO_TYPE SO_USELOOPBACK SO_XOPEN SO_XSE
+    SO_ACCEPTCONN SO_ATTACH_FILTER SO_BACKLOG SO_BROADCAST SO_CHAMELEON
+    SO_DEBUG SO_DETACH_FILTER SO_DGRAM_ERRIND SO_DOMAIN SO_DONTLINGER
+    SO_DONTROUTE SO_ERROR SO_FAMILY SO_KEEPALIVE SO_LINGER SO_OOBINLINE
+    SO_PASSCRED SO_PASSIFNAME SO_PEERCRED SO_PROTOCOL SO_PROTOTYPE
+    SO_RCVBUF SO_RCVLOWAT SO_RCVTIMEO SO_REUSEADDR SO_REUSEPORT
+    SO_SECURITY_AUTHENTICATION SO_SECURITY_ENCRYPTION_NETWORK
+    SO_SECURITY_ENCRYPTION_TRANSPORT SO_SNDBUF SO_SNDLOWAT SO_SNDTIMEO
+    SO_STATE SO_TYPE SO_USELOOPBACK SO_XOPEN SO_XSE
 
-       IP_HDRINCL IP_OPTIONS IP_RECVOPTS IP_RECVRETOPTS IP_RETOPTS IP_TOS
-       IP_TTL
+    IP_HDRINCL IP_OPTIONS IP_RECVOPTS IP_RECVRETOPTS IP_RETOPTS IP_TOS
+    IP_TTL
 
-       MSG_BCAST MSG_BTAG MSG_CTLFLAGS MSG_CTLIGNORE MSG_CTRUNC MSG_DONTROUTE
-       MSG_DONTWAIT MSG_EOF MSG_EOR MSG_ERRQUEUE MSG_ETAG MSG_FASTOPEN MSG_FIN
-       MSG_MAXIOVLEN MSG_MCAST MSG_NOSIGNAL MSG_OOB MSG_PEEK MSG_PROXY MSG_RST
-       MSG_SYN MSG_TRUNC MSG_URG MSG_WAITALL MSG_WIRE
+    MSG_BCAST MSG_BTAG MSG_CTLFLAGS MSG_CTLIGNORE MSG_CTRUNC MSG_DONTROUTE
+    MSG_DONTWAIT MSG_EOF MSG_EOR MSG_ERRQUEUE MSG_ETAG MSG_FASTOPEN MSG_FIN
+    MSG_MAXIOVLEN MSG_MCAST MSG_NOSIGNAL MSG_OOB MSG_PEEK MSG_PROXY MSG_RST
+    MSG_SYN MSG_TRUNC MSG_URG MSG_WAITALL MSG_WIRE
 
-       SHUT_RD SHUT_RDWR SHUT_WR
+    SHUT_RD SHUT_RDWR SHUT_WR
 
-       INADDR_ANY INADDR_BROADCAST INADDR_LOOPBACK INADDR_NONE
+    INADDR_ANY INADDR_BROADCAST INADDR_LOOPBACK INADDR_NONE
 
-       SCM_CONNECT SCM_CREDENTIALS SCM_CREDS SCM_RIGHTS SCM_TIMESTAMP
+    SCM_CONNECT SCM_CREDENTIALS SCM_CREDS SCM_RIGHTS SCM_TIMESTAMP
 
-       SOMAXCONN
+    SOMAXCONN
 
-       IOV_MAX
-       UIO_MAXIOV
+    IOV_MAX
+    UIO_MAXIOV
 
-       sockaddr_family
-       pack_sockaddr_in  unpack_sockaddr_in  sockaddr_in
-       pack_sockaddr_in6 unpack_sockaddr_in6 sockaddr_in6
-       pack_sockaddr_un  unpack_sockaddr_un  sockaddr_un 
+    sockaddr_family
+    pack_sockaddr_in  unpack_sockaddr_in  sockaddr_in
+    pack_sockaddr_in6 unpack_sockaddr_in6 sockaddr_in6
+    pack_sockaddr_un  unpack_sockaddr_un  sockaddr_un 
 
-       inet_aton inet_ntoa
+    inet_aton inet_ntoa
 );
 
 # List re-ordered to match documentation above. Try to keep the ordering
 # consistent so it's easier to see which ones are or aren't documented.
 our @EXPORT_OK = qw(
-       CR LF CRLF $CR $LF $CRLF
+    CR LF CRLF $CR $LF $CRLF
 
-       SOCK_NONBLOCK SOCK_CLOEXEC
+    SOCK_NONBLOCK SOCK_CLOEXEC
 
-       IP_ADD_MEMBERSHIP IP_ADD_SOURCE_MEMBERSHIP IP_BIND_ADDRESS_NO_PORT
-       IP_DROP_MEMBERSHIP IP_DROP_SOURCE_MEMBERSHIP IP_FREEBIND
-       IP_MULTICAST_ALL IP_MULTICAST_IF IP_MULTICAST_LOOP IP_MULTICAST_TTL
-       IP_MTU IP_MTU_DISCOVER IP_NODEFRAG IP_RECVERR IP_TRANSPARENT
+    IP_ADD_MEMBERSHIP IP_ADD_SOURCE_MEMBERSHIP IP_BIND_ADDRESS_NO_PORT
+    IP_DROP_MEMBERSHIP IP_DROP_SOURCE_MEMBERSHIP IP_FREEBIND
+    IP_MULTICAST_ALL IP_MULTICAST_IF IP_MULTICAST_LOOP IP_MULTICAST_TTL
+    IP_MTU IP_MTU_DISCOVER IP_NODEFRAG IP_RECVERR IP_TRANSPARENT
 
-       IPPROTO_IP IPPROTO_IPV6 IPPROTO_RAW IPPROTO_ICMP IPPROTO_IGMP
-       IPPROTO_TCP IPPROTO_UDP IPPROTO_GRE IPPROTO_ESP IPPROTO_AH
-       IPPROTO_ICMPV6 IPPROTO_SCTP
+    IPPROTO_IP IPPROTO_IPV6 IPPROTO_RAW IPPROTO_ICMP IPPROTO_IGMP
+    IPPROTO_TCP IPPROTO_UDP IPPROTO_GRE IPPROTO_ESP IPPROTO_AH
+    IPPROTO_ICMPV6 IPPROTO_SCTP
 
-       IP_PMTUDISC_DO IP_PMTUDISC_DONT IP_PMTUDISC_PROBE IP_PMTUDISC_WANT
+    IP_PMTUDISC_DO IP_PMTUDISC_DONT IP_PMTUDISC_PROBE IP_PMTUDISC_WANT
 
-       IPTOS_LOWDELAY IPTOS_THROUGHPUT IPTOS_RELIABILITY IPTOS_MINCOST
+    IPTOS_LOWDELAY IPTOS_THROUGHPUT IPTOS_RELIABILITY IPTOS_MINCOST
 
-       TCP_CONGESTION TCP_CONNECTIONTIMEOUT TCP_CORK TCP_DEFER_ACCEPT
-       TCP_FASTOPEN TCP_INFO TCP_INIT_CWND TCP_KEEPALIVE TCP_KEEPCNT
-       TCP_KEEPIDLE TCP_KEEPINTVL TCP_LINGER2 TCP_MAXRT TCP_MAXSEG
-       TCP_MD5SIG TCP_NODELAY TCP_NOOPT TCP_NOPUSH TCP_QUICKACK
-       TCP_SACK_ENABLE TCP_STDURG TCP_SYNCNT TCP_USER_TIMEOUT
-       TCP_WINDOW_CLAMP
+    TCP_CONGESTION TCP_CONNECTIONTIMEOUT TCP_CORK TCP_DEFER_ACCEPT
+    TCP_FASTOPEN TCP_INFO TCP_INIT_CWND TCP_KEEPALIVE TCP_KEEPCNT
+    TCP_KEEPIDLE TCP_KEEPINTVL TCP_LINGER2 TCP_MAXRT TCP_MAXSEG
+    TCP_MD5SIG TCP_NODELAY TCP_NOOPT TCP_NOPUSH TCP_QUICKACK
+    TCP_SACK_ENABLE TCP_STDURG TCP_SYNCNT TCP_USER_TIMEOUT
+    TCP_WINDOW_CLAMP
 
-       IN6ADDR_ANY IN6ADDR_LOOPBACK
+    IN6ADDR_ANY IN6ADDR_LOOPBACK
 
-       IPV6_ADDRFROM IPV6_ADD_MEMBERSHIP IPV6_DROP_MEMBERSHIP IPV6_JOIN_GROUP
-       IPV6_LEAVE_GROUP IPV6_MTU IPV6_MTU_DISCOVER IPV6_MULTICAST_HOPS
-       IPV6_MULTICAST_IF IPV6_MULTICAST_LOOP IPV6_RECVERR IPV6_ROUTER_ALERT
-       IPV6_UNICAST_HOPS IPV6_V6ONLY
+    IPV6_ADDRFROM IPV6_ADD_MEMBERSHIP IPV6_DROP_MEMBERSHIP IPV6_JOIN_GROUP
+    IPV6_LEAVE_GROUP IPV6_MTU IPV6_MTU_DISCOVER IPV6_MULTICAST_HOPS
+    IPV6_MULTICAST_IF IPV6_MULTICAST_LOOP IPV6_RECVERR IPV6_ROUTER_ALERT
+    IPV6_UNICAST_HOPS IPV6_V6ONLY
 
-       SO_INCOMING_CPU SO_INCOMING_NAPI_ID SO_LOCK_FILTER SO_RCVBUFFORCE
-       SO_SNDBUFFORCE
+    SO_INCOMING_CPU SO_INCOMING_NAPI_ID SO_LOCK_FILTER SO_RCVBUFFORCE
+    SO_SNDBUFFORCE
 
-       pack_ip_mreq unpack_ip_mreq pack_ip_mreq_source unpack_ip_mreq_source
+    pack_ip_mreq unpack_ip_mreq pack_ip_mreq_source unpack_ip_mreq_source
 
-       pack_ipv6_mreq unpack_ipv6_mreq
+    pack_ipv6_mreq unpack_ipv6_mreq
 
-       inet_pton inet_ntop
+    inet_pton inet_ntop
 
-       getaddrinfo getnameinfo
+    getaddrinfo getnameinfo
 
-       AI_ADDRCONFIG AI_ALL AI_CANONIDN AI_CANONNAME AI_IDN
-       AI_IDN_ALLOW_UNASSIGNED AI_IDN_USE_STD3_ASCII_RULES AI_NUMERICHOST
-       AI_NUMERICSERV AI_PASSIVE AI_V4MAPPED
+    AI_ADDRCONFIG AI_ALL AI_CANONIDN AI_CANONNAME AI_IDN
+    AI_IDN_ALLOW_UNASSIGNED AI_IDN_USE_STD3_ASCII_RULES AI_NUMERICHOST
+    AI_NUMERICSERV AI_PASSIVE AI_V4MAPPED
 
-       NI_DGRAM NI_IDN NI_IDN_ALLOW_UNASSIGNED NI_IDN_USE_STD3_ASCII_RULES
-       NI_NAMEREQD NI_NOFQDN NI_NUMERICHOST NI_NUMERICSERV
+    NI_DGRAM NI_IDN NI_IDN_ALLOW_UNASSIGNED NI_IDN_USE_STD3_ASCII_RULES
+    NI_NAMEREQD NI_NOFQDN NI_NUMERICHOST NI_NUMERICSERV
 
-       NIx_NOHOST NIx_NOSERV
+    NIx_NOHOST NIx_NOSERV
 
-       EAI_ADDRFAMILY EAI_AGAIN EAI_BADFLAGS EAI_BADHINTS EAI_FAIL EAI_FAMILY
-       EAI_NODATA EAI_NONAME EAI_PROTOCOL EAI_SERVICE EAI_SOCKTYPE EAI_SYSTEM
+    EAI_ADDRFAMILY EAI_AGAIN EAI_BADFLAGS EAI_BADHINTS EAI_FAIL EAI_FAMILY
+    EAI_NODATA EAI_NONAME EAI_PROTOCOL EAI_SERVICE EAI_SOCKTYPE EAI_SYSTEM
 );
 
 our %EXPORT_TAGS = (
@@ -842,42 +842,42 @@ BEGIN {
 foreach my $name (qw( AI_IDN_ALLOW_UNASSIGNED AI_IDN_USE_STD3_ASCII_RULES NI_IDN_ALLOW_UNASSIGNED NI_IDN_USE_STD3_ASCII_RULES )) {
     no strict 'refs';
     *$name = sub {
-       croak "The addrinfo constant $name is deprecated";
+        croak "The addrinfo constant $name is deprecated";
     };
 }
 
 sub sockaddr_in {
     if (@_ == 6 && !wantarray) { # perl5.001m compat; use this && die
-       my($af, $port, @quad) = @_;
-       warnings::warn "6-ARG sockaddr_in call is deprecated" 
-           if warnings::enabled();
-       pack_sockaddr_in($port, inet_aton(join('.', @quad)));
+        my($af, $port, @quad) = @_;
+        warnings::warn "6-ARG sockaddr_in call is deprecated" 
+            if warnings::enabled();
+        pack_sockaddr_in($port, inet_aton(join('.', @quad)));
     } elsif (wantarray) {
-       croak "usage:   (port,iaddr) = sockaddr_in(sin_sv)" unless @_ == 1;
+        croak "usage:   (port,iaddr) = sockaddr_in(sin_sv)" unless @_ == 1;
         unpack_sockaddr_in(@_);
     } else {
-       croak "usage:   sin_sv = sockaddr_in(port,iaddr))" unless @_ == 2;
+        croak "usage:   sin_sv = sockaddr_in(port,iaddr))" unless @_ == 2;
         pack_sockaddr_in(@_);
     }
 }
 
 sub sockaddr_in6 {
     if (wantarray) {
-       croak "usage:   (port,in6addr,scope_id,flowinfo) = sockaddr_in6(sin6_sv)" unless @_ == 1;
-       unpack_sockaddr_in6(@_);
+        croak "usage:   (port,in6addr,scope_id,flowinfo) = sockaddr_in6(sin6_sv)" unless @_ == 1;
+        unpack_sockaddr_in6(@_);
     }
     else {
-       croak "usage:   sin6_sv = sockaddr_in6(port,in6addr,[scope_id,[flowinfo]])" unless @_ >= 2 and @_ <= 4;
-       pack_sockaddr_in6(@_);
+        croak "usage:   sin6_sv = sockaddr_in6(port,in6addr,[scope_id,[flowinfo]])" unless @_ >= 2 and @_ <= 4;
+        pack_sockaddr_in6(@_);
     }
 }
 
 sub sockaddr_un {
     if (wantarray) {
-       croak "usage:   (filename) = sockaddr_un(sun_sv)" unless @_ == 1;
+        croak "usage:   (filename) = sockaddr_un(sun_sv)" unless @_ == 1;
         unpack_sockaddr_un(@_);
     } else {
-       croak "usage:   sun_sv = sockaddr_un(filename)" unless @_ == 1;
+        croak "usage:   sun_sv = sockaddr_un(filename)" unless @_ == 1;
         pack_sockaddr_un(@_);
     }
 }
@@ -901,55 +901,55 @@ if( defined &getaddrinfo ) {
     # they're only used by our emulation, it doesn't matter if the real
     # platform's values differ
     my %constants = (
-       AI_PASSIVE     => 1,
-       AI_CANONNAME   => 2,
-       AI_NUMERICHOST => 4,
-       AI_V4MAPPED    => 8,
-       AI_ALL         => 16,
-       AI_ADDRCONFIG  => 32,
-       # 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,
-       EAI_NODATA     => -5,
-       EAI_FAMILY     => -6,
-       EAI_SERVICE    => -8,
-
-       NI_NUMERICHOST => 1,
-       NI_NUMERICSERV => 2,
-       NI_NOFQDN      => 4,
-       NI_NAMEREQD    => 8,
-       NI_DGRAM       => 16,
-
-       # Constants we don't support. Export them, but croak if anyone tries to
-       # use them
-       AI_IDN      => 64,
-       AI_CANONIDN => 128,
-       NI_IDN      => 32,
-
-       # Error constants we'll never return, so it doesn't matter what value
-       # these have, nor that we don't provide strings for them
-       EAI_SYSTEM   => -11,
-       EAI_BADHINTS => -1000,
-       EAI_PROTOCOL => -1001
+        AI_PASSIVE     => 1,
+        AI_CANONNAME   => 2,
+        AI_NUMERICHOST => 4,
+        AI_V4MAPPED    => 8,
+        AI_ALL         => 16,
+        AI_ADDRCONFIG  => 32,
+        # 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,
+        EAI_NODATA     => -5,
+        EAI_FAMILY     => -6,
+        EAI_SERVICE    => -8,
+
+        NI_NUMERICHOST => 1,
+        NI_NUMERICSERV => 2,
+        NI_NOFQDN      => 4,
+        NI_NAMEREQD    => 8,
+        NI_DGRAM       => 16,
+
+        # Constants we don't support. Export them, but croak if anyone tries to
+        # use them
+        AI_IDN      => 64,
+        AI_CANONIDN => 128,
+        NI_IDN      => 32,
+
+        # Error constants we'll never return, so it doesn't matter what value
+        # these have, nor that we don't provide strings for them
+        EAI_SYSTEM   => -11,
+        EAI_BADHINTS => -1000,
+        EAI_PROTOCOL => -1001
     );
 
     foreach my $name ( keys %constants ) {
-       my $value = $constants{$name};
+        my $value = $constants{$name};
 
-       no strict 'refs';
-       defined &$name or *$name = sub () { $value };
+        no strict 'refs';
+        defined &$name or *$name = sub () { $value };
     }
 
     %errstr = (
-       # These strings from RFC 2553
-       EAI_BADFLAGS()   => "invalid value for ai_flags",
-       EAI_NONAME()     => "nodename nor servname provided, or not known",
-       EAI_NODATA()     => "no address associated with nodename",
-       EAI_FAMILY()     => "ai_family not supported",
-       EAI_SERVICE()    => "servname not supported for ai_socktype",
+        # These strings from RFC 2553
+        EAI_BADFLAGS()   => "invalid value for ai_flags",
+        EAI_NONAME()     => "nodename nor servname provided, or not known",
+        EAI_NODATA()     => "no address associated with nodename",
+        EAI_FAMILY()     => "ai_family not supported",
+        EAI_SERVICE()    => "servname not supported for ai_socktype",
     );
 }
 
@@ -998,7 +998,7 @@ sub fake_getaddrinfo
     $flags &= ~(AI_V4MAPPED()|AI_ALL()|AI_ADDRCONFIG());
 
     $flags & (AI_IDN()|AI_CANONIDN()) and
-       croak "Socket::getaddrinfo() does not support IDN";
+        croak "Socket::getaddrinfo() does not support IDN";
 
     $flags == 0 or return fake_makeerr( EAI_BADFLAGS() );
 
@@ -1007,71 +1007,71 @@ sub fake_getaddrinfo
     my $canonname;
     my @addrs;
     if( $node ne "" ) {
-       return fake_makeerr( EAI_NONAME() ) if( $flag_numerichost and $node !~ m/^$REGEXP_IPv4_DOTTEDQUAD$/ );
-       ( $canonname, undef, undef, undef, @addrs ) = gethostbyname( $node );
-       defined $canonname or return fake_makeerr( EAI_NONAME() );
+        return fake_makeerr( EAI_NONAME() ) if( $flag_numerichost and $node !~ m/^$REGEXP_IPv4_DOTTEDQUAD$/ );
+        ( $canonname, undef, undef, undef, @addrs ) = gethostbyname( $node );
+        defined $canonname or return fake_makeerr( EAI_NONAME() );
 
-       undef $canonname unless $flag_canonname;
+        undef $canonname unless $flag_canonname;
     }
     else {
-       $addrs[0] = $flag_passive ? Socket::inet_aton( "0.0.0.0" )
-                                 : Socket::inet_aton( "127.0.0.1" );
+        $addrs[0] = $flag_passive ? Socket::inet_aton( "0.0.0.0" )
+                                  : Socket::inet_aton( "127.0.0.1" );
     }
 
     my @ports; # Actually ARRAYrefs of [ socktype, protocol, port ]
     my $protname = "";
     if( $protocol ) {
-       $protname = eval { getprotobynumber( $protocol ) };
+        $protname = eval { getprotobynumber( $protocol ) };
     }
 
     if( $service ne "" and $service !~ m/^\d+$/ ) {
-       return fake_makeerr( EAI_NONAME() ) if( $flag_numericserv );
-       getservbyname( $service, $protname ) or return fake_makeerr( EAI_SERVICE() );
+        return fake_makeerr( EAI_NONAME() ) if( $flag_numericserv );
+        getservbyname( $service, $protname ) or return fake_makeerr( EAI_SERVICE() );
     }
 
     foreach my $this_socktype ( Socket::SOCK_STREAM(), Socket::SOCK_DGRAM(), Socket::SOCK_RAW() ) {
-       next if $socktype and $this_socktype != $socktype;
-
-       my $this_protname = "raw";
-       $this_socktype == Socket::SOCK_STREAM() and $this_protname = "tcp";
-       $this_socktype == Socket::SOCK_DGRAM()  and $this_protname = "udp";
-
-       next if $protname and $this_protname ne $protname;
-
-       my $port;
-       if( $service ne "" ) {
-           if( $service =~ m/^\d+$/ ) {
-               $port = "$service";
-           }
-           else {
-               ( undef, undef, $port, $this_protname ) = getservbyname( $service, $this_protname );
-               next unless defined $port;
-           }
-       }
-       else {
-           $port = 0;
-       }
-
-       push @ports, [ $this_socktype, eval { scalar getprotobyname( $this_protname ) } || 0, $port ];
+        next if $socktype and $this_socktype != $socktype;
+
+        my $this_protname = "raw";
+        $this_socktype == Socket::SOCK_STREAM() and $this_protname = "tcp";
+        $this_socktype == Socket::SOCK_DGRAM()  and $this_protname = "udp";
+
+        next if $protname and $this_protname ne $protname;
+
+        my $port;
+        if( $service ne "" ) {
+            if( $service =~ m/^\d+$/ ) {
+                $port = "$service";
+            }
+            else {
+                ( undef, undef, $port, $this_protname ) = getservbyname( $service, $this_protname );
+                next unless defined $port;
+            }
+        }
+        else {
+            $port = 0;
+        }
+
+        push @ports, [ $this_socktype, eval { scalar getprotobyname( $this_protname ) } || 0, $port ];
     }
 
     my @ret;
     foreach my $addr ( @addrs ) {
-       foreach my $portspec ( @ports ) {
-           my ( $socktype, $protocol, $port ) = @$portspec;
-           push @ret, {
-               family    => $family,
-               socktype  => $socktype,
-               protocol  => $protocol,
-               addr      => Socket::pack_sockaddr_in( $port, $addr ),
-               canonname => undef,
-           };
-       }
+        foreach my $portspec ( @ports ) {
+            my ( $socktype, $protocol, $port ) = @$portspec;
+            push @ret, {
+                family    => $family,
+                socktype  => $socktype,
+                protocol  => $protocol,
+                addr      => Socket::pack_sockaddr_in( $port, $addr ),
+                canonname => undef,
+            };
+        }
     }
 
     # Only supply canonname for the first result
     if( defined $canonname ) {
-       $ret[0]->{canonname} = $canonname;
+        $ret[0]->{canonname} = $canonname;
     }
 
     return ( fake_makeerr( 0 ), @ret );
@@ -1083,7 +1083,7 @@ sub fake_getnameinfo
 
     my ( $port, $inetaddr );
     eval { ( $port, $inetaddr ) = Socket::unpack_sockaddr_in( $addr ) }
-       or return fake_makeerr( EAI_FAMILY() );
+        or return fake_makeerr( EAI_FAMILY() );
 
     my $family = Socket::AF_INET();
 
@@ -1096,7 +1096,7 @@ sub fake_getnameinfo
     my $flag_dgram       = $flags & NI_DGRAM()   ;    $flags &= ~NI_DGRAM();
 
     $flags & NI_IDN() and
-       croak "Socket::getnameinfo() does not support IDN";
+        croak "Socket::getnameinfo() does not support IDN";
 
     $flags == 0 or return fake_makeerr( EAI_BADFLAGS() );
 
@@ -1104,37 +1104,37 @@ sub fake_getnameinfo
 
     my $node;
     if( $xflags & NIx_NOHOST ) {
-       $node = undef;
+        $node = undef;
     }
     elsif( $flag_numerichost ) {
-       $node = Socket::inet_ntoa( $inetaddr );
+        $node = Socket::inet_ntoa( $inetaddr );
     }
     else {
-       $node = gethostbyaddr( $inetaddr, $family );
-       if( !defined $node ) {
-           return fake_makeerr( EAI_NONAME() ) if $flag_namereqd;
-           $node = Socket::inet_ntoa( $inetaddr );
-       }
-       elsif( $flag_nofqdn ) {
-           my ( $shortname ) = split m/\./, $node;
-           my ( $fqdn ) = gethostbyname $shortname;
-           $node = $shortname if defined $fqdn and $fqdn eq $node;
-       }
+        $node = gethostbyaddr( $inetaddr, $family );
+        if( !defined $node ) {
+            return fake_makeerr( EAI_NONAME() ) if $flag_namereqd;
+            $node = Socket::inet_ntoa( $inetaddr );
+        }
+        elsif( $flag_nofqdn ) {
+            my ( $shortname ) = split m/\./, $node;
+            my ( $fqdn ) = gethostbyname $shortname;
+            $node = $shortname if defined $fqdn and $fqdn eq $node;
+        }
     }
 
     my $service;
     if( $xflags & NIx_NOSERV ) {
-       $service = undef;
+        $service = undef;
     }
     elsif( $flag_numericserv ) {
-       $service = "$port";
+        $service = "$port";
     }
     else {
-       my $protname = $flag_dgram ? "udp" : "";
-       $service = getservbyport( $port, $protname );
-       if( !defined $service ) {
-           $service = "$port";
-       }
+        my $protname = $flag_dgram ? "udp" : "";
+        $service = getservbyport( $port, $protname );
+        if( !defined $service ) {
+            $service = "$port";
+        }
     }
 
     return ( fake_makeerr( 0 ), $node, $service );