xref: /openbsd-src/gnu/usr.bin/perl/cpan/IO-Socket-IP/t/17gai-flags.t (revision 5486feefcc8cb79b19e014ab332cc5dfd05b3b33)
16fb12b70Safresh1#!/usr/bin/perl
26fb12b70Safresh1
3*5486feefSafresh1use v5.14;
46fb12b70Safresh1use warnings;
56fb12b70Safresh1
66fb12b70Safresh1use Test::More;
76fb12b70Safresh1
86fb12b70Safresh1use IO::Socket::IP;
96fb12b70Safresh1use Socket 1.95 qw(
106fb12b70Safresh1   PF_INET SOCK_STREAM IPPROTO_TCP pack_sockaddr_in INADDR_ANY
116fb12b70Safresh1   AI_PASSIVE AI_NUMERICSERV
126fb12b70Safresh1);
136fb12b70Safresh1
146fb12b70Safresh1my $AI_ADDRCONFIG = eval { Socket::AI_ADDRCONFIG() } || 0;
156fb12b70Safresh1
166fb12b70Safresh1my @gai_args;
176fb12b70Safresh1my @gai_rets;
186fb12b70Safresh1
196fb12b70Safresh1no strict 'refs';
206fb12b70Safresh1no warnings 'redefine';
216fb12b70Safresh1
226fb12b70Safresh1*{"IO::Socket::IP::getaddrinfo"} = sub {
236fb12b70Safresh1   push @gai_args, [ @_ ];
246fb12b70Safresh1   return @{ shift @gai_rets };
256fb12b70Safresh1};
266fb12b70Safresh1
276fb12b70Safresh1@gai_args = ();
286fb12b70Safresh1@gai_rets = (
296fb12b70Safresh1   [ "", {
306fb12b70Safresh1         family   => PF_INET,
316fb12b70Safresh1         socktype => SOCK_STREAM,
326fb12b70Safresh1         protocol => IPPROTO_TCP,
336fb12b70Safresh1         addr     => pack_sockaddr_in( 80, INADDR_ANY )
346fb12b70Safresh1      } ],
356fb12b70Safresh1);
366fb12b70Safresh1IO::Socket::IP->new( LocalPort => "80" );
376fb12b70Safresh1
386fb12b70Safresh1is_deeply( \@gai_args,
396fb12b70Safresh1           [
406fb12b70Safresh1              [ undef, "80", { flags => AI_PASSIVE|$AI_ADDRCONFIG, socktype => SOCK_STREAM, protocol => IPPROTO_TCP } ],
416fb12b70Safresh1           ],
426fb12b70Safresh1           '@gai_args for LocalPort => "80"' );
436fb12b70Safresh1
446fb12b70Safresh1SKIP: {
456fb12b70Safresh1   skip "No AI_NUMERICSERV", 1 unless defined eval { AI_NUMERICSERV() };
466fb12b70Safresh1
476fb12b70Safresh1   @gai_args = ();
486fb12b70Safresh1   @gai_rets = (
496fb12b70Safresh1      [ "", {
506fb12b70Safresh1            family   => PF_INET,
516fb12b70Safresh1            socktype => SOCK_STREAM,
526fb12b70Safresh1            protocol => IPPROTO_TCP,
536fb12b70Safresh1            addr     => pack_sockaddr_in( 80, INADDR_ANY )
546fb12b70Safresh1         } ],
556fb12b70Safresh1   );
566fb12b70Safresh1   IO::Socket::IP->new( LocalPort => "80", GetAddrInfoFlags => AI_NUMERICSERV );
576fb12b70Safresh1
586fb12b70Safresh1   is_deeply( \@gai_args,
596fb12b70Safresh1              [
606fb12b70Safresh1                 [ undef, "80", { flags => AI_PASSIVE|AI_NUMERICSERV, socktype => SOCK_STREAM, protocol => IPPROTO_TCP } ],
616fb12b70Safresh1              ],
626fb12b70Safresh1              '@gai_args for LocalPort => "80", GetAddrInfoFlags => AI_NUMERICSERV' );
636fb12b70Safresh1}
646fb12b70Safresh1
656fb12b70Safresh1done_testing;
66