]> Sergey Matveev's repositories - public-inbox.git/commitdiff
listener: emit warnings on EPERM
authorEric Wong <e@80x24.org>
Sun, 24 Oct 2021 00:20:43 +0000 (18:20 -0600)
committerEric Wong <e@80x24.org>
Sun, 24 Oct 2021 02:20:33 +0000 (02:20 +0000)
In retrospect, warnings for EPERM on accept4(2) failure may
help detect misconfigured firewalls, so start emitting warnings
for EPERM.  Fwiw, I've never known excessive EPERM warnings
to be excessively noisy in other TCP services I've run over
the years.

lib/PublicInbox/Listener.pm

index 09f1f2e5fabde020d464995552e896729981d4c6..7cedc3493f872df866755e1c2c9d5d545df7c319 100644 (file)
@@ -8,7 +8,7 @@ use parent 'PublicInbox::DS';
 use Socket qw(SOL_SOCKET SO_KEEPALIVE IPPROTO_TCP TCP_NODELAY);
 use IO::Handle;
 use PublicInbox::Syscall qw(EPOLLIN EPOLLEXCLUSIVE);
 use Socket qw(SOL_SOCKET SO_KEEPALIVE IPPROTO_TCP TCP_NODELAY);
 use IO::Handle;
 use PublicInbox::Syscall qw(EPOLLIN EPOLLEXCLUSIVE);
-use Errno qw(EAGAIN ECONNABORTED EPERM);
+use Errno qw(EAGAIN ECONNABORTED);
 
 # Warn on transient errors, mostly resource limitations.
 # EINTR would indicate the failure to set NonBlocking in systemd or similar
 
 # Warn on transient errors, mostly resource limitations.
 # EINTR would indicate the failure to set NonBlocking in systemd or similar
@@ -38,13 +38,9 @@ sub event_step {
                IO::Handle::blocking($c, 0); # no accept4 :<
                eval { $self->{post_accept}->($c, $addr, $sock) };
                warn "E: $@\n" if $@;
                IO::Handle::blocking($c, 0); # no accept4 :<
                eval { $self->{post_accept}->($c, $addr, $sock) };
                warn "E: $@\n" if $@;
-       } elsif ($! == EAGAIN || $! == ECONNABORTED || $! == EPERM) {
+       } elsif ($! == EAGAIN || $! == ECONNABORTED) {
                # EAGAIN is common and likely
                # ECONNABORTED is common with bad connections
                # EAGAIN is common and likely
                # ECONNABORTED is common with bad connections
-               # EPERM happens if firewall rules prevent a connection
-               # on Linux (and everything that emulates Linux).
-               # Firewall rules are sometimes intentional, so we don't
-               # warn on EPERM to avoid being too noisy...
                return;
        } elsif (my $sym = $ERR_WARN{int($!)}) {
                warn "W: accept(): $! ($sym)\n";
                return;
        } elsif (my $sym = $ERR_WARN{int($!)}) {
                warn "W: accept(): $! ($sym)\n";