mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-01-10 20:03:34 -03:00
Avoid test-before-evict evictions of current peers
Outbound peer logic prevents connecting to addresses that we're already connected to, so prevent inadvertent eviction of current peers via test-before-evict by checking this condition and marking current peer's addresses as Good(). Co-authored-by: John Newbery <john@johnnewbery.com>
This commit is contained in:
parent
e8b215a086
commit
16d9bfc417
1 changed files with 23 additions and 4 deletions
27
src/net.cpp
27
src/net.cpp
|
@ -1999,11 +1999,30 @@ void CConnman::ThreadOpenConnections(const std::vector<std::string> connect)
|
||||||
if (nTries > 100)
|
if (nTries > 100)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
CAddrInfo addr = addrman.SelectTriedCollision();
|
CAddrInfo addr;
|
||||||
|
|
||||||
// SelectTriedCollision returns an invalid address if it is empty.
|
if (fFeeler) {
|
||||||
if (!fFeeler || !addr.IsValid()) {
|
// First, try to get a tried table collision address. This returns
|
||||||
addr = addrman.Select(fFeeler);
|
// an empty (invalid) address if there are no collisions to try.
|
||||||
|
addr = addrman.SelectTriedCollision();
|
||||||
|
|
||||||
|
if (!addr.IsValid()) {
|
||||||
|
// No tried table collisions. Select a new table address
|
||||||
|
// for our feeler.
|
||||||
|
addr = addrman.Select(true);
|
||||||
|
} 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
|
||||||
|
// address as Good(). We won't be able to initiate the
|
||||||
|
// connection anyway, so this avoids inadvertently evicting
|
||||||
|
// a currently-connected peer.
|
||||||
|
addrman.Good(addr);
|
||||||
|
// Select a new table address for our feeler instead.
|
||||||
|
addr = addrman.Select(true);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// Not a feeler
|
||||||
|
addr = addrman.Select();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Require outbound connections, other than feelers, to be to distinct network groups
|
// Require outbound connections, other than feelers, to be to distinct network groups
|
||||||
|
|
Loading…
Reference in a new issue