Skip to content

Commit 3a56de7

Browse files
author
Jeff Garzik
committed
addrman: Do not propagate obviously poor addresses onto the network
1 parent a4f151f commit 3a56de7

File tree

1 file changed

+10
-4
lines changed

1 file changed

+10
-4
lines changed

src/addrman.cpp

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -492,17 +492,23 @@ int CAddrMan::Check_()
492492

493493
void CAddrMan::GetAddr_(std::vector<CAddress> &vAddr)
494494
{
495-
int nNodes = ADDRMAN_GETADDR_MAX_PCT*vRandom.size()/100;
495+
unsigned int nNodes = ADDRMAN_GETADDR_MAX_PCT * vRandom.size() / 100;
496496
if (nNodes > ADDRMAN_GETADDR_MAX)
497497
nNodes = ADDRMAN_GETADDR_MAX;
498498

499-
// perform a random shuffle over the first nNodes elements of vRandom (selecting from all)
500-
for (int n = 0; n<nNodes; n++)
499+
// gather a list of random nodes, skipping those of low quality
500+
for (unsigned int n = 0; n < vRandom.size(); n++)
501501
{
502+
if (vAddr.size() >= nNodes)
503+
break;
504+
502505
int nRndPos = GetRandInt(vRandom.size() - n) + n;
503506
SwapRandom(n, nRndPos);
504507
assert(mapInfo.count(vRandom[n]) == 1);
505-
vAddr.push_back(mapInfo[vRandom[n]]);
508+
509+
const CAddrInfo& ai = mapInfo[vRandom[n]];
510+
if (!ai.IsTerrible())
511+
vAddr.push_back(ai);
506512
}
507513
}
508514

0 commit comments

Comments
 (0)