about summary refs log tree commit homepage
path: root/lib/PublicInbox/Daemon.pm
diff options
context:
space:
mode:
authorEric Wong <e@80x24.org>2019-02-06 11:07:41 +0000
committerEric Wong <e@80x24.org>2019-02-07 01:00:25 +0000
commitc539d9df124a66f07edbae2bc51177a0f756cc95 (patch)
treecf84fcc05b43c49e98b4bf6e21f5e605c04acc7e /lib/PublicInbox/Daemon.pm
parente90e8b9548bee4abef01c1426db2541a01f8d003 (diff)
downloadpublic-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/PublicInbox/Daemon.pm')
-rw-r--r--lib/PublicInbox/Daemon.pm21
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);
 }