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