File tree Expand file tree Collapse file tree 1 file changed +10
-4
lines changed Expand file tree Collapse file tree 1 file changed +10
-4
lines changed Original file line number Diff line number Diff line change @@ -492,17 +492,23 @@ int CAddrMan::Check_()
492
492
493
493
void CAddrMan::GetAddr_ (std::vector<CAddress> &vAddr)
494
494
{
495
- int nNodes = ADDRMAN_GETADDR_MAX_PCT* vRandom.size ()/ 100 ;
495
+ unsigned int nNodes = ADDRMAN_GETADDR_MAX_PCT * vRandom.size () / 100 ;
496
496
if (nNodes > ADDRMAN_GETADDR_MAX)
497
497
nNodes = ADDRMAN_GETADDR_MAX;
498
498
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++)
501
501
{
502
+ if (vAddr.size () >= nNodes)
503
+ break ;
504
+
502
505
int nRndPos = GetRandInt (vRandom.size () - n) + n;
503
506
SwapRandom (n, nRndPos);
504
507
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);
506
512
}
507
513
}
508
514
You can’t perform that action at this time.
0 commit comments