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