diff --git a/src/net.cpp b/src/net.cpp --- a/src/net.cpp +++ b/src/net.cpp @@ -1059,18 +1059,27 @@ int bannedlevel = m_banman ? m_banman->IsBannedLevel(addr) : 0; - // Don't accept connections from banned peers, but if our inbound slots - // aren't almost full, accept if the only banning reason was an automatic - // misbehavior ban. + // Don't accept connections from banned peers. if (!NetPermissions::HasFlag(permissionFlags, NetPermissionFlags::PF_NOBAN) && - bannedlevel > ((nInbound + 1 < nMaxInbound) ? 1 : 0)) { + bannedlevel == 2) { LogPrint(BCLog::NET, "connection from %s dropped (banned)\n", addr.ToString()); CloseSocket(hSocket); return; } + // Only accept connections from discouraged peers if our inbound slots + // aren't (almost) full. + if (!NetPermissions::HasFlag(permissionFlags, + NetPermissionFlags::PF_NOBAN) && + nInbound + 1 >= nMaxInbound && bannedlevel >= 1) { + LogPrint(BCLog::NET, "connection from %s dropped (discouraged)\n", + addr.ToString()); + CloseSocket(hSocket); + return; + } + if (nInbound >= nMaxInbound) { if (!AttemptToEvictConnection()) { // No connection to evict, disconnect the new connection