]> Sergey Matveev's repositories - public-inbox.git/commitdiff
daemon: make Socket6 optional, note about Net::Socket::IP
authorEric Wong <e@80x24.org>
Thu, 10 Jan 2019 04:02:59 +0000 (04:02 +0000)
committerEric Wong <e@80x24.org>
Thu, 10 Jan 2019 04:08:35 +0000 (04:08 +0000)
It looks like Net::Socket::IP comes with Perl 5.20 and
later; so we won't have to hassle users with another
package to install.

lib/PublicInbox/Daemon.pm

index 6d2ae81bc1694dcc3c9fbf1ae2cbf7b249c3153d..6aa4a1943044ca4002eb38e84e0c470b7e734058 100644 (file)
@@ -234,6 +234,21 @@ sub sockname ($) {
        "$host:$port";
 }
 
+sub unpack_ipv6 ($) {
+       my ($addr) = @_;
+
+       # TODO: support IO::Socket::IP which comes with Perl 5.24
+       # (perl-modules-5.24 in Debian)
+
+       # SpamAssassin and Net::Server use Socket6, so it may be installed
+       # on our system, already:
+       eval { require Socket6 } or return ('???-Socket6-missing', 0);
+
+       my ($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 +256,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);