diff --git a/nano/node/confirmation_solicitor.cpp b/nano/node/confirmation_solicitor.cpp index ee2ba8a7f1..336427bb08 100644 --- a/nano/node/confirmation_solicitor.cpp +++ b/nano/node/confirmation_solicitor.cpp @@ -70,7 +70,7 @@ bool nano::confirmation_solicitor::add (nano::election const & election_a) if (!exists || !is_final || different) { auto & request_queue (requests[rep.channel]); - if (request_queue.size () < max_channel_requests) + if (!rep.channel->full ()) { request_queue.emplace_back (election_a.status.winner->hash (), election_a.status.winner->root ()); count += different ? 0 : 1; diff --git a/nano/node/transport/tcp.hpp b/nano/node/transport/tcp.hpp index 5f64d46f69..839ffb80dd 100644 --- a/nano/node/transport/tcp.hpp +++ b/nano/node/transport/tcp.hpp @@ -68,6 +68,16 @@ namespace transport return nano::transport::transport_type::tcp; } + virtual bool full () override + { + bool result = true; + if (auto socket_l = socket.lock ()) + { + result = socket_l->max (); + } + return result; + } + private: nano::tcp_endpoint endpoint{ boost::asio::ip::address_v6::any (), 0 }; }; diff --git a/nano/node/transport/transport.hpp b/nano/node/transport/transport.hpp index 8c413c65f6..631323c377 100644 --- a/nano/node/transport/transport.hpp +++ b/nano/node/transport/transport.hpp @@ -58,6 +58,10 @@ namespace transport virtual nano::endpoint get_endpoint () const = 0; virtual nano::tcp_endpoint get_tcp_endpoint () const = 0; virtual nano::transport::transport_type get_type () const = 0; + virtual bool full () + { + return false; + } std::chrono::steady_clock::time_point get_last_bootstrap_attempt () const {