From e4e3b44e9cc7227b3ad765397c884999f57bac2e Mon Sep 17 00:00:00 2001 From: brunoerg Date: Tue, 13 Feb 2024 10:40:00 -0300 Subject: [PATCH] net: call `Select` with reachable networks in `ThreadOpenConnections` Calling `Select` with reachable networks can avoid unecessary calls and avoid exceed the max number of tries. --- src/net.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/net.cpp b/src/net.cpp index 2d504e7c4c2..7629c8ab566 100644 --- a/src/net.cpp +++ b/src/net.cpp @@ -2692,6 +2692,8 @@ void CConnman::ThreadOpenConnections(const std::vector connect, Spa const auto current_time{NodeClock::now()}; int nTries = 0; + const auto reachable_nets{g_reachable_nets.All()}; + while (!interruptNet) { if (anchor && !m_anchors.empty()) { @@ -2723,7 +2725,7 @@ void CConnman::ThreadOpenConnections(const std::vector connect, Spa if (!addr.IsValid()) { // No tried table collisions. Select a new table address // for our feeler. - std::tie(addr, addr_last_try) = addrman.Select(true); + std::tie(addr, addr_last_try) = addrman.Select(true, reachable_nets); } else if (AlreadyConnectedToAddress(addr)) { // If test-before-evict logic would have us connect to a // peer that we're already connected to, just mark that @@ -2732,18 +2734,16 @@ void CConnman::ThreadOpenConnections(const std::vector connect, Spa // a currently-connected peer. addrman.Good(addr); // Select a new table address for our feeler instead. - std::tie(addr, addr_last_try) = addrman.Select(true); + std::tie(addr, addr_last_try) = addrman.Select(true, reachable_nets); } } else { // Not a feeler // If preferred_net has a value set, pick an extra outbound // peer from that network. The eviction logic in net_processing // ensures that a peer from another network will be evicted. - std::unordered_set preferred_nets; - if (preferred_net.has_value()) { - preferred_nets = {*preferred_net}; - } - std::tie(addr, addr_last_try) = addrman.Select(false, preferred_nets); + std::tie(addr, addr_last_try) = preferred_net.has_value() + ? addrman.Select(false, {*preferred_net}) + : addrman.Select(false, reachable_nets); } // Require outbound IPv4/IPv6 connections, other than feelers, to be to distinct network groups