1#!/usr/bin/perl 2 3use strict; 4use warnings; 5 6use Test::More; 7 8use IO::Socket::IP; 9 10use IO::Socket::INET; 11use Socket qw( SOCK_STREAM unpack_sockaddr_in getaddrinfo ); 12 13{ 14 my $testserver = IO::Socket::INET->new( 15 Listen => 1, 16 LocalHost => "127.0.0.1", 17 Type => SOCK_STREAM, 18 ) or die "Cannot listen on PF_INET - $@"; 19 20 my ( $err, @peeraddrinfo ) = getaddrinfo( "127.0.0.1", $testserver->sockport, { socktype => SOCK_STREAM } ); 21 $err and die "Cannot getaddrinfo 127.0.0.1 - $err"; 22 23 my $socket = IO::Socket::IP->new( 24 PeerAddrInfo => \@peeraddrinfo, 25 ); 26 27 ok( defined $socket, 'IO::Socket::IP->new( PeerAddrInfo => ... ) constructs a new socket' ) or 28 diag( " error was $@" ); 29 30 is_deeply( [ unpack_sockaddr_in $socket->peername ], 31 [ unpack_sockaddr_in $testserver->sockname ], 32 '$socket->peername' ); 33} 34 35{ 36 my ( $err, @localaddrinfo ) = getaddrinfo( "127.0.0.1", 0, { socktype => SOCK_STREAM } ); 37 $err and die "Cannot getaddrinfo 127.0.0.1 - $err"; 38 39 my $socket = IO::Socket::IP->new( 40 Listen => 1, 41 LocalAddrInfo => \@localaddrinfo, 42 ); 43 44 ok( defined $socket, 'IO::Socket::IP->new( LocalAddrInfo => ... ) constructs a new socket' ) or 45 diag( " error was $@" ); 46 47 my $testclient = IO::Socket::INET->new( 48 PeerHost => "127.0.0.1", 49 PeerPort => $socket->sockport, 50 ) or die "Cannot connect to localhost - $@"; 51 52 is_deeply( [ unpack_sockaddr_in $socket->sockname ], 53 [ unpack_sockaddr_in $testclient->peername ], 54 '$socket->sockname' ); 55} 56 57done_testing; 58