diff options
author | Eric Wong <e@80x24.org> | 2019-02-06 11:07:41 +0000 |
---|---|---|
committer | Eric Wong <e@80x24.org> | 2019-02-07 01:00:25 +0000 |
commit | c539d9df124a66f07edbae2bc51177a0f756cc95 (patch) | |
tree | cf84fcc05b43c49e98b4bf6e21f5e605c04acc7e /lib | |
parent | e90e8b9548bee4abef01c1426db2541a01f8d003 (diff) | |
download | public-inbox-c539d9df124a66f07edbae2bc51177a0f756cc95.tar.gz |
Users on Perl 5.14+ are common, so we can try the bundled Socket (not "Socket6") module before attempting Socket6 for IPv6.
Diffstat (limited to 'lib')
-rw-r--r-- | lib/PublicInbox/Daemon.pm | 21 |
1 files changed, 14 insertions, 7 deletions
diff --git a/lib/PublicInbox/Daemon.pm b/lib/PublicInbox/Daemon.pm index 033dd98a..48051f48 100644 --- a/lib/PublicInbox/Daemon.pm +++ b/lib/PublicInbox/Daemon.pm @@ -236,16 +236,23 @@ sub sockname ($) { sub unpack_ipv6 ($) { my ($addr) = @_; + my ($port, $host); - # TODO: support IO::Socket::IP which comes with Perl 5.24 - # (perl-modules-5.24 in Debian) + # Socket.pm in Perl 5.14+ supports IPv6: + eval { + ($port, $host) = Socket::unpack_sockaddr_in6($addr); + $host = Socket::inet_ntop(Socket::AF_INET6(), $host); + }; - # SpamAssassin and Net::Server use Socket6, so it may be installed - # on our system, already (otherwise die): - require Socket6; + 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; - my ($port, $host) = Socket6::unpack_sockaddr_in6($addr); - $host = Socket6::inet_ntop(Socket6::AF_INET6(), $host); + ($port, $host) = Socket6::unpack_sockaddr_in6($addr); + $host = Socket6::inet_ntop(Socket6::AF_INET6(), $host); + } ($host, $port); } |