#!/usr/bin/perl
PF_INET SOCK_STREAM IPPROTO_TCP pack_sockaddr_in INADDR_ANY
AI_PASSIVE AI_NUMERICSERV
)
;
my
$AI_ADDRCONFIG
=
eval
{ Socket::AI_ADDRCONFIG() } || 0;
my
@gai_args
;
my
@gai_rets
;
no
strict
'refs'
;
no
warnings
'redefine'
;
*{
"IO::Socket::IP::getaddrinfo"
} =
sub
{
push
@gai_args
, [
@_
];
return
@{
shift
@gai_rets
};
};
@gai_args
= ();
@gai_rets
= (
[
""
, {
family
=> PF_INET,
socktype
=> SOCK_STREAM,
protocol
=> IPPROTO_TCP,
addr
=> pack_sockaddr_in( 80, INADDR_ANY )
} ],
);
IO::Socket::IP->new(
LocalPort
=>
"80"
);
is_deeply( \
@gai_args
,
[
[
undef
,
"80"
, {
flags
=> AI_PASSIVE|
$AI_ADDRCONFIG
,
socktype
=> SOCK_STREAM,
protocol
=> IPPROTO_TCP } ],
],
'@gai_args for LocalPort => "80"'
);
SKIP: {
skip
"No AI_NUMERICSERV"
, 1
unless
defined
eval
{ AI_NUMERICSERV() };
@gai_args
= ();
@gai_rets
= (
[
""
, {
family
=> PF_INET,
socktype
=> SOCK_STREAM,
protocol
=> IPPROTO_TCP,
addr
=> pack_sockaddr_in( 80, INADDR_ANY )
} ],
);
IO::Socket::IP->new(
LocalPort
=>
"80"
,
GetAddrInfoFlags
=> AI_NUMERICSERV );
is_deeply( \
@gai_args
,
[
[
undef
,
"80"
, {
flags
=> AI_PASSIVE|AI_NUMERICSERV,
socktype
=> SOCK_STREAM,
protocol
=> IPPROTO_TCP } ],
],
'@gai_args for LocalPort => "80", GetAddrInfoFlags => AI_NUMERICSERV'
);
}
done_testing;