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