1#!/usr/bin/perl 2 3use v5; 4use strict; 5use warnings; 6 7use Test::More; 8 9use IO::Socket::IP; 10use Socket 1.95 qw( 11 PF_INET SOCK_STREAM IPPROTO_TCP pack_sockaddr_in INADDR_ANY 12 AI_PASSIVE AI_NUMERICSERV 13); 14 15my $AI_ADDRCONFIG = eval { Socket::AI_ADDRCONFIG() } || 0; 16 17my @gai_args; 18my @gai_rets; 19 20no strict 'refs'; 21no warnings 'redefine'; 22 23*{"IO::Socket::IP::getaddrinfo"} = sub { 24 push @gai_args, [ @_ ]; 25 return @{ shift @gai_rets }; 26}; 27 28@gai_args = (); 29@gai_rets = ( 30 [ "", { 31 family => PF_INET, 32 socktype => SOCK_STREAM, 33 protocol => IPPROTO_TCP, 34 addr => pack_sockaddr_in( 80, INADDR_ANY ) 35 } ], 36); 37IO::Socket::IP->new( LocalPort => "80" ); 38 39is_deeply( \@gai_args, 40 [ 41 [ undef, "80", { flags => AI_PASSIVE|$AI_ADDRCONFIG, socktype => SOCK_STREAM, protocol => IPPROTO_TCP } ], 42 ], 43 '@gai_args for LocalPort => "80"' ); 44 45SKIP: { 46 skip "No AI_NUMERICSERV", 1 unless defined eval { AI_NUMERICSERV() }; 47 48 @gai_args = (); 49 @gai_rets = ( 50 [ "", { 51 family => PF_INET, 52 socktype => SOCK_STREAM, 53 protocol => IPPROTO_TCP, 54 addr => pack_sockaddr_in( 80, INADDR_ANY ) 55 } ], 56 ); 57 IO::Socket::IP->new( LocalPort => "80", GetAddrInfoFlags => AI_NUMERICSERV ); 58 59 is_deeply( \@gai_args, 60 [ 61 [ undef, "80", { flags => AI_PASSIVE|AI_NUMERICSERV, socktype => SOCK_STREAM, protocol => IPPROTO_TCP } ], 62 ], 63 '@gai_args for LocalPort => "80", GetAddrInfoFlags => AI_NUMERICSERV' ); 64} 65 66done_testing; 67