This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Upgrade IO-Socket-IP from version 0.36 to 0.37
authorSteve Hay <steve.m.hay@googlemail.com>
Thu, 26 Mar 2015 08:26:27 +0000 (08:26 +0000)
committerSteve Hay <steve.m.hay@googlemail.com>
Mon, 30 Mar 2015 07:31:40 +0000 (08:31 +0100)
Porting/Maintainers.pl
cpan/IO-Socket-IP/lib/IO/Socket/IP.pm
cpan/IO-Socket-IP/t/02local-server-v4.t
cpan/IO-Socket-IP/t/03local-cross-v4.t
cpan/IO-Socket-IP/t/05local-server-v6.t
cpan/IO-Socket-IP/t/06local-cross-v6.t
cpan/IO-Socket-IP/t/16v6only.t

index ede0cfb..39bbd61 100755 (executable)
@@ -628,7 +628,7 @@ use File::Glob qw(:case);
     },
 
     'IO::Socket::IP' => {
-        'DISTRIBUTION' => 'PEVANS/IO-Socket-IP-0.36.tar.gz',
+        'DISTRIBUTION' => 'PEVANS/IO-Socket-IP-0.37.tar.gz',
         'FILES'        => q[cpan/IO-Socket-IP],
         'EXCLUDED'     => [
             qr{^examples/},
index 5435f4f..3266fab 100644 (file)
@@ -7,7 +7,7 @@ package IO::Socket::IP;
 # $VERSION needs to be set before  use base 'IO::Socket'
 #  - https://rt.cpan.org/Ticket/Display.html?id=92107
 BEGIN {
-   $VERSION = '0.36';
+   $VERSION = '0.37';
 }
 
 use strict;
@@ -396,6 +396,12 @@ sub _io_socket_ip__configure
    my @localinfos;
    my @peerinfos;
 
+   my $listenqueue = $arg->{Listen};
+   if( defined $listenqueue and
+       ( defined $arg->{PeerHost} || defined $arg->{PeerService} || defined $arg->{PeerAddrInfo} ) ) {
+      croak "Cannot Listen with a peer address";
+   }
+
    if( defined $arg->{GetAddrInfoFlags} ) {
       $hints{flags} = $arg->{GetAddrInfoFlags};
    }
@@ -503,10 +509,6 @@ sub _io_socket_ip__configure
    push @sockopts_enabled, SO_REUSEPORT if $arg->{ReusePort};
    push @sockopts_enabled, SO_BROADCAST if $arg->{Broadcast};
 
-   my $listenqueue = $arg->{Listen};
-
-   croak "Cannot Listen with a PeerHost" if defined $listenqueue and @peerinfos;
-
    my $blocking = $arg->{Blocking};
    defined $blocking or $blocking = 1;
 
@@ -628,7 +630,7 @@ sub setup
             return 1;
          }
 
-         if( $! == EINPROGRESS or HAVE_MSWIN32 && $! == Errno::EWOULDBLOCK() ) {
+         if( $! == EINPROGRESS or $! == EWOULDBLOCK ) {
             ${*$self}{io_socket_ip_connect_in_progress} = 1;
             return 0;
          }
@@ -820,11 +822,11 @@ Return the resolved name of the local port number
 
 =cut
 
-sub sockhost { my $self = shift; ( $self->_get_host_service( $self->sockname, NI_NUMERICHOST, NIx_NOSERV ) )[0] }
-sub sockport { my $self = shift; ( $self->_get_host_service( $self->sockname, NI_NUMERICSERV, NIx_NOHOST ) )[1] }
+sub sockhost { my $self = shift; scalar +( $self->_get_host_service( $self->sockname, NI_NUMERICHOST, NIx_NOSERV ) )[0] }
+sub sockport { my $self = shift; scalar +( $self->_get_host_service( $self->sockname, NI_NUMERICSERV, NIx_NOHOST ) )[1] }
 
-sub sockhostname { my $self = shift; ( $self->_get_host_service( $self->sockname, 0, NIx_NOSERV ) )[0] }
-sub sockservice  { my $self = shift; ( $self->_get_host_service( $self->sockname, 0, NIx_NOHOST ) )[1] }
+sub sockhostname { my $self = shift; scalar +( $self->_get_host_service( $self->sockname, 0, NIx_NOSERV ) )[0] }
+sub sockservice  { my $self = shift; scalar +( $self->_get_host_service( $self->sockname, 0, NIx_NOHOST ) )[1] }
 
 =head2 $addr = $sock->sockaddr
 
@@ -873,11 +875,11 @@ Return the resolved name of the peer port number
 
 =cut
 
-sub peerhost { my $self = shift; ( $self->_get_host_service( $self->peername, NI_NUMERICHOST, NIx_NOSERV ) )[0] }
-sub peerport { my $self = shift; ( $self->_get_host_service( $self->peername, NI_NUMERICSERV, NIx_NOHOST ) )[1] }
+sub peerhost { my $self = shift; scalar +( $self->_get_host_service( $self->peername, NI_NUMERICHOST, NIx_NOSERV ) )[0] }
+sub peerport { my $self = shift; scalar +( $self->_get_host_service( $self->peername, NI_NUMERICSERV, NIx_NOHOST ) )[1] }
 
-sub peerhostname { my $self = shift; ( $self->_get_host_service( $self->peername, 0, NIx_NOSERV ) )[0] }
-sub peerservice  { my $self = shift; ( $self->_get_host_service( $self->peername, 0, NIx_NOHOST ) )[1] }
+sub peerhostname { my $self = shift; scalar +( $self->_get_host_service( $self->peername, 0, NIx_NOSERV ) )[0] }
+sub peerservice  { my $self = shift; scalar +( $self->_get_host_service( $self->peername, 0, NIx_NOHOST ) )[1] }
 
 =head2 $addr = $peer->peeraddr
 
@@ -917,7 +919,7 @@ sub socket :method
 # Versions of IO::Socket before 1.35 may leave socktype undef if from, say, an
 #   ->fdopen call. In this case we'll apply a fix
 BEGIN {
-   if( $IO::Socket::VERSION < 1.35 ) {
+   if( eval($IO::Socket::VERSION) < 1.35 ) {
       *socktype = sub {
          my $self = shift;
          my $type = $self->SUPER::socktype;
index 5f7d0fb..c0d349f 100644 (file)
@@ -27,7 +27,7 @@ foreach my $socktype (qw( SOCK_STREAM SOCK_DGRAM )) {
    my $testserver = IO::Socket::IP->new(
       ( $socktype eq "SOCK_STREAM" ? ( Listen => 1 ) : () ),
       LocalHost => "127.0.0.1",
-      Port      => 0,
+      LocalPort => "0",
       Type      => Socket->$socktype,
    );
 
@@ -43,6 +43,10 @@ foreach my $socktype (qw( SOCK_STREAM SOCK_DGRAM )) {
    ok( eval { $testserver->peerport; 1 }, "\$testserver->peerport does not die for $socktype" )
       or do { chomp( my $e = $@ ); diag( "Exception was: $e" ) };
 
+   is_deeply( { host => $testserver->peerhost, port => $testserver->peerport },
+              { host => undef, port => undef },
+      'peerhost/peersock yield scalar' );
+
    my $socket = IO::Socket::INET->new(
       PeerHost => "127.0.0.1",
       PeerPort => $testserver->sockport,
index 4d75d95..8cac72a 100644 (file)
@@ -11,7 +11,7 @@ foreach my $socktype (qw( SOCK_STREAM SOCK_DGRAM )) {
    my $testserver = IO::Socket::IP->new(
       ( $socktype eq "SOCK_STREAM" ? ( Listen => 1 ) : () ),
       LocalHost => "127.0.0.1",
-      Port      => 0,
+      LocalPort => "0",
       Type      => Socket->$socktype,
    ) or die "Cannot listen on PF_INET - $@";
 
index cecdbd5..bd33d41 100644 (file)
@@ -33,7 +33,7 @@ foreach my $socktype (qw( SOCK_STREAM SOCK_DGRAM )) {
    my $testserver = IO::Socket::IP->new(
       ( $socktype eq "SOCK_STREAM" ? ( Listen => 1 ) : () ),
       LocalHost => "::1",
-      Port      => 0,
+      LocalPort => "0",
       Type      => Socket->$socktype,
       GetAddrInfoFlags => 0, # disable AI_ADDRCONFIG
    );
index 8d40f4a..9618b97 100644 (file)
@@ -14,7 +14,7 @@ foreach my $socktype (qw( SOCK_STREAM SOCK_DGRAM )) {
    my $testserver = IO::Socket::IP->new(
       ( $socktype eq "SOCK_STREAM" ? ( Listen => 1 ) : () ),
       LocalHost => "::1",
-      Port      => 0,
+      LocalPort => "0",
       Type      => Socket->$socktype,
    ) or die "Cannot listen on PF_INET6 - $@";
 
index 8e3ee31..d900cd7 100644 (file)
@@ -14,6 +14,10 @@ eval { IO::Socket::IP->new( LocalHost => "::1" ) } or
 eval { defined IPV6_V6ONLY } or
    plan skip_all => "IPV6_V6ONLY not available";
 
+# https://rt.cpan.org/Ticket/Display.html?id=102662
+$^O eq "irix" and
+   plan skip_all => "$^O: IPV6_V6ONLY exists but getnameinfo() fails with EAI_NONAME";
+
 # Don't be locale-sensitive
 $! = Errno::ECONNREFUSED;
 my $ECONNREFUSED_STR = "$!";