Skip to content

Commit

Permalink
Use network group instead of CNetAddr in final pass to select node to…
Browse files Browse the repository at this point in the history
… disconnect
  • Loading branch information
pstratem authored and Fuzzbawls committed Jun 23, 2020
1 parent 7f030fe commit fabf358
Showing 1 changed file with 10 additions and 10 deletions.
20 changes: 10 additions & 10 deletions src/net.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1012,29 +1012,29 @@ static bool AttemptToEvictConnection(bool fPreferNewConnection) {

if (vEvictionCandidates.empty()) return false;

// Identify CNetAddr with the most connections
CNetAddr naMostConnections;
// Identify the network group with the most connections
std::vector<unsigned char> naMostConnections;
unsigned int nMostConnections = 0;
std::map<CNetAddr, std::vector<CNodeRef> > mapAddrCounts;
std::map<std::vector<unsigned char>, std::vector<CNodeRef> > mapAddrCounts;
for (const CNodeRef& node : vEvictionCandidates) {
mapAddrCounts[node->addr].push_back(node);
mapAddrCounts[node->addr.GetGroup()].push_back(node);

if (mapAddrCounts[node->addr].size() > nMostConnections) {
nMostConnections = mapAddrCounts[node->addr].size();
naMostConnections = node->addr;
if (mapAddrCounts[node->addr.GetGroup()].size() > nMostConnections) {
nMostConnections = mapAddrCounts[node->addr.GetGroup()].size();
naMostConnections = node->addr.GetGroup();
}
}

// Reduce to the CNetAddr with the most connections
// Reduce to the network group with the most connections
vEvictionCandidates = mapAddrCounts[naMostConnections];

// Do not disconnect peers who have only 1 evictable connection
// Do not disconnect peers if there is only 1 connection from their network group
if (vEvictionCandidates.size() <= 1)
// unless we prefer the new connection (for whitelisted peers)
if (!fPreferNewConnection)
return false;

// Disconnect the most recent connection from the CNetAddr with the most connections
// Disconnect the most recent connection from the network group with the most connections
std::sort(vEvictionCandidates.begin(), vEvictionCandidates.end(), ReverseCompareNodeTimeConnected);
vEvictionCandidates[0]->fDisconnect = true;

Expand Down

0 comments on commit fabf358

Please sign in to comment.