From aec49aa5d10347ad6728d1bd58bae1c8d05a78ae Mon Sep 17 00:00:00 2001 From: subtly Date: Fri, 24 Apr 2015 19:16:47 +0100 Subject: [PATCH] simple max inc connect limit --- libp2p/Host.cpp | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/libp2p/Host.cpp b/libp2p/Host.cpp index b7a3a929a..09802e445 100644 --- a/libp2p/Host.cpp +++ b/libp2p/Host.cpp @@ -226,6 +226,12 @@ void Host::startPeerSession(Public const& _id, RLP const& _rlp, RLPXFrameIO* _io return; } + if (peerCount() > 2 * m_idealPeerCount) + { + ps->disconnect(TooManyPeers); + return; + } + // todo: mutex Session::m_capabilities and move for(:caps) out of mutex. unsigned o = (unsigned)UserPacket; for (auto const& i: caps) @@ -335,6 +341,15 @@ void Host::runAcceptor() auto socket = make_shared(new bi::tcp::socket(m_ioService)); m_tcp4Acceptor.async_accept(socket->ref(), [=](boost::system::error_code ec) { + if (peerCount() > 2 * m_idealPeerCount) + { + clog(NetConnect) << "Dropping incoming connect due to maximum peer count (2 * ideal peer count): " << socket->remoteEndpoint(); + socket->close(); + if (ec.value() < 1) + runAcceptor(); + return; + } + // if no error code bool success = false; if (!ec)