]> Sergey Matveev's repositories - public-inbox.git/blobdiff - lib/PublicInbox/Daemon.pm
daemon: provide TCP_DEFER_ACCEPT for Perl <5.14
[public-inbox.git] / lib / PublicInbox / Daemon.pm
index 9db472a19479b5fdfd271c6c60c6597116cadbe9..15d8bd31438f37ee00b34105a29444c2beb8d4a1 100644 (file)
@@ -6,7 +6,7 @@ package PublicInbox::Daemon;
 use strict;
 use warnings;
 use Getopt::Long qw/:config gnu_getopt no_ignore_case auto_abbrev/;
-use IO::Handle;
+use IO::Handle; # ->autoflush
 use IO::Socket;
 use POSIX qw(WNOHANG :signal_h);
 use Socket qw(IPPROTO_TCP SOL_SOCKET);
@@ -566,11 +566,12 @@ sub defer_accept ($$) {
        my ($s, $af_name) = @_;
        return unless defined $af_name;
        if ($^O eq 'linux') {
-               my $x = getsockopt($s, IPPROTO_TCP, Socket::TCP_DEFER_ACCEPT());
+               my $TCP_DEFER_ACCEPT = 9; # Socket::TCP_DEFER_ACCEPT is in 5.14+
+               my $x = getsockopt($s, IPPROTO_TCP, $TCP_DEFER_ACCEPT);
                return unless defined $x; # may be Unix socket
                my $sec = unpack('i', $x);
                return if $sec > 0; # systemd users may set a higher value
-               setsockopt($s, IPPROTO_TCP, Socket::TCP_DEFER_ACCEPT(), 1);
+               setsockopt($s, IPPROTO_TCP, $TCP_DEFER_ACCEPT, 1);
        } elsif ($^O eq 'freebsd') {
                my $x = getsockopt($s, SOL_SOCKET, SO_ACCEPTFILTER);
                return if defined $x; # don't change if set
@@ -637,6 +638,7 @@ sub daemon_loop ($$$$) {
 
 sub run ($$$;$) {
        my ($default, $refresh, $post_accept, $nntpd) = @_;
+       local $SIG{PIPE} = 'IGNORE';
        daemon_prepare($default);
        my $af_default = $default =~ /:8080\z/ ? 'httpready' : undef;
        my $for_destroy = daemonize();