X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=lib%2FPublicInbox%2FDaemon.pm;h=48051f488b6c5bbd08408c291794cc9a041a9c86;hb=c539d9df124a66f07edbae2bc51177a0f756cc95;hp=6d2ae81bc1694dcc3c9fbf1ae2cbf7b249c3153d;hpb=9427c808130255911dd3e4eee99b6f2c1cc42066;p=public-inbox.git diff --git a/lib/PublicInbox/Daemon.pm b/lib/PublicInbox/Daemon.pm index 6d2ae81b..48051f48 100644 --- a/lib/PublicInbox/Daemon.pm +++ b/lib/PublicInbox/Daemon.pm @@ -234,6 +234,28 @@ sub sockname ($) { "$host:$port"; } +sub unpack_ipv6 ($) { + my ($addr) = @_; + my ($port, $host); + + # Socket.pm in Perl 5.14+ supports IPv6: + eval { + ($port, $host) = Socket::unpack_sockaddr_in6($addr); + $host = Socket::inet_ntop(Socket::AF_INET6(), $host); + }; + + if ($@) { + # Perl 5.12 or earlier? SpamAssassin and Net::Server use + # Socket6, so it may be installed on our system, already + # (otherwise die here): + require Socket6; + + ($port, $host) = Socket6::unpack_sockaddr_in6($addr); + $host = Socket6::inet_ntop(Socket6::AF_INET6(), $host); + } + ($host, $port); +} + sub host_with_port ($) { my ($addr) = @_; my ($port, $host); @@ -241,9 +263,7 @@ sub host_with_port ($) { # this eval will die on Unix sockets: eval { if (length($addr) >= 28) { - require Socket6; - ($port, $host) = Socket6::unpack_sockaddr_in6($addr); - $host = Socket6::inet_ntop(Socket6::AF_INET6(), $host); + ($host, $port) = unpack_ipv6($addr); $host = "[$host]"; } else { ($port, $host) = Socket::sockaddr_in($addr);