Socket::GetAddrInfo::Emul
- Pure Perl emulation of getaddrinfo
and getnameinfo
using IPv4-only legacy resolvers
Socket::GetAddrInfo
attempts to provide the getaddrinfo
and getnameinfo
functions by some XS code that calls the real functions in libc.
If for some reason this cannot be done; either there is no C compiler,
or libc does not provide these functions,
then they will be emulated using the legacy resolvers gethostbyname
,
etc...
These emulations are not a complete replacement of the real functions,
because they only support IPv4 (the AF_INET
socket family).
In this case,
the following restrictions will apply.
family
hint is supplied,
it must be AF_INET
.
Any other value will result in an error thrown by croak
.flags
hint values are AI_PASSIVE
,
AI_CANONNAME
,
AI_NUMERICSERV
and AI_NUMERICHOST
.
The flags AI_V4MAPPED
and AI_ALL
are recognised but ignored,
as they do not apply to AF_INET
lookups.
Since this function only returns AF_INET
addresses,
it does not need to probe the system for configured addresses in other families,
so the AI_ADDRCONFIG
flag is also ignored.
Note that AI_NUMERICSERV
is an extension not defined by RFC 2553,
but is provided by most OSes.
It is possible (though unlikely) that even the native XS implementation does not recognise this constant.
$addr
is anything other than AF_INET
,
an error will be thrown with croak
.$flags
values are NI_NUMERICHOST
,
NI_NUMERICSERV
,
NI_NOFQDN
,
NI_NAMEREQD
and NI_DGRAM
.This pure-perl emulation provides the IDN constants such as AI_IDN
and NI_IDN
,
but the getaddrinfo
and getnameinfo
functions will croak if passed these flags.
This should allow a program to probe for their support,
and fall back to some other behaviour instead.
Paul Evans <leonerd@leonerd.org.uk>