aboutsummaryrefslogtreecommitdiff
path: root/src/addrman.cpp
diff options
context:
space:
mode:
authorGregory Maxwell <greg@xiph.org>2015-04-19 12:34:43 -0700
committerGregory Maxwell <greg@xiph.org>2016-05-26 12:56:27 +0000
commitc769c4af11fc58dd4813d328c7f71042bc577676 (patch)
tree7c86c072c97dd185d723cc1bac363a3c34b000ff /src/addrman.cpp
parentf6b7df3155ddb4cedfbcf5d3eb3383d4614b3a85 (diff)
downloadbitcoin-c769c4af11fc58dd4813d328c7f71042bc577676.tar.xz
Avoid counting failed connect attempts when probably offline.
If a node is offline failed outbound connection attempts will crank up the addrman counter and effectively blow away our state. This change reduces the problem by only counting attempts made while the node believes it has outbound connections to at least two netgroups. Connect and addnode connections are also not counted, as there is no reason to unequally penalize them for their more frequent connections -- though there should be no real effect from this unless their addnode configureation is later removed. Wasteful repeated connection attempts while only a few connections are up are avoided via nLastTry. This is still somewhat incomplete protection because our outbound peers could be down but not timed out or might all be on 'local' networks (although the requirement for multiple netgroups helps).
Diffstat (limited to 'src/addrman.cpp')
-rw-r--r--src/addrman.cpp4
1 files changed, 2 insertions, 2 deletions
diff --git a/src/addrman.cpp b/src/addrman.cpp
index 6c54cfa4cd..0a1745c10c 100644
--- a/src/addrman.cpp
+++ b/src/addrman.cpp
@@ -311,7 +311,7 @@ bool CAddrMan::Add_(const CAddress& addr, const CNetAddr& source, int64_t nTimeP
return fNew;
}
-void CAddrMan::Attempt_(const CService& addr, int64_t nTime)
+void CAddrMan::Attempt_(const CService& addr, bool fCountFailure, int64_t nTime)
{
CAddrInfo* pinfo = Find(addr);
@@ -327,7 +327,7 @@ void CAddrMan::Attempt_(const CService& addr, int64_t nTime)
// update info
info.nLastTry = nTime;
- info.nAttempts++;
+ if (fCountFailure) info.nAttempts++;
}
CAddrInfo CAddrMan::Select_(bool newOnly)