X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=lib%2FPublicInbox%2FDaemon.pm;h=227ba5f979d09ef23eebaf892284b27137222165;hb=b6f480ed58abc5ae2a426ef4f792621b9d3cf283;hp=6aa4a1943044ca4002eb38e84e0c470b7e734058;hpb=b0e5062d43a96372801713ef78a78d6a1bc852bc;p=public-inbox.git diff --git a/lib/PublicInbox/Daemon.pm b/lib/PublicInbox/Daemon.pm index 6aa4a194..227ba5f9 100644 --- a/lib/PublicInbox/Daemon.pm +++ b/lib/PublicInbox/Daemon.pm @@ -12,7 +12,8 @@ use Cwd qw/abs_path/; use Time::HiRes qw(clock_gettime CLOCK_MONOTONIC); STDOUT->autoflush(1); STDERR->autoflush(1); -require Danga::Socket; +require PublicInbox::DS; +require PublicInbox::EvCleanup; require POSIX; require PublicInbox::Listener; require PublicInbox::ParentPipe; @@ -172,14 +173,14 @@ sub worker_quit { # killing again terminates immediately: exit unless @listeners; - $_->close foreach @listeners; # call Danga::Socket::close + $_->close foreach @listeners; # call PublicInbox::DS::close @listeners = (); $reason->close if ref($reason) eq 'PublicInbox::ParentPipe'; my $proc_name; my $warn = 0; # drop idle connections and try to quit gracefully - Danga::Socket->SetPostLoopCallback(sub { + PublicInbox::DS->SetPostLoopCallback(sub { my ($dmap, undef) = @_; my $n = 0; my $now = clock_gettime(CLOCK_MONOTONIC); @@ -236,16 +237,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: - eval { require Socket6 } or return ('???-Socket6-missing', 0); + 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); } @@ -456,6 +464,7 @@ sub master_loop { sub daemon_loop ($$) { my ($refresh, $post_accept) = @_; + PublicInbox::EvCleanup::enable(); # early for $refresh my $parent_pipe; if ($worker_processes > 0) { $refresh->(); # preload by default @@ -478,8 +487,7 @@ sub daemon_loop ($$) { @listeners = map { PublicInbox::Listener->new($_, $post_accept) } @listeners; - PublicInbox::EvCleanup::enable(); - Danga::Socket->EventLoop; + PublicInbox::DS->EventLoop; $parent_pipe = undef; }