diff options
author | Pieter Wuille <pieter.wuille@gmail.com> | 2012-08-21 17:32:04 +0200 |
---|---|---|
committer | Pieter Wuille <pieter.wuille@gmail.com> | 2012-08-22 13:35:33 +0200 |
commit | f161a2c2114cd7d950248ce75a91ba1923e9abb1 (patch) | |
tree | c0a36b5585a4d8b490324e8c3dc575d3cee146da /src | |
parent | f39ab4c8d01a14ccc784b122ea133a67b8f75e10 (diff) |
Fix infinite loops in connection logic
Diffstat (limited to 'src')
-rw-r--r-- | src/init.cpp | 2 | ||||
-rw-r--r-- | src/net.cpp | 8 |
2 files changed, 8 insertions, 2 deletions
diff --git a/src/init.cpp b/src/init.cpp index 7322b23eac..1a1e31c2f3 100644 --- a/src/init.cpp +++ b/src/init.cpp @@ -357,7 +357,7 @@ bool AppInit2() SoftSetBoolArg("-listen", true); } - if (mapArgs.count("-connect")) { + if (mapArgs.count("-connect") && mapMultiArgs["-connect"].size() > 0) { // when only connecting to trusted nodes, do not seed via DNS, or listen by default SoftSetBoolArg("-dnsseed", false); SoftSetBoolArg("-listen", false); diff --git a/src/net.cpp b/src/net.cpp index 1c87eb9685..aaf7883e51 100644 --- a/src/net.cpp +++ b/src/net.cpp @@ -1391,7 +1391,7 @@ void ThreadOpenConnections2(void* parg) printf("ThreadOpenConnections started\n"); // Connect to specific addresses - if (mapArgs.count("-connect")) + if (mapArgs.count("-connect") && mapMultiArgs["-connect"].size() > 0) { for (int64 nLoop = 0;; nLoop++) { @@ -1407,6 +1407,7 @@ void ThreadOpenConnections2(void* parg) return; } } + Sleep(500); } } @@ -1480,7 +1481,12 @@ void ThreadOpenConnections2(void* parg) if (!addr.IsValid() || setConnected.count(addr.GetGroup()) || IsLocal(addr)) break; + // If we didn't find an appropriate destination after trying 100 addresses fetched from addrman, + // stop this loop, and let the outer loop run again (which sleeps, adds seed nodes, recalculates + // already-connected network ranges, ...) before trying new addrman addresses. nTries++; + if (nTries > 100) + break; if (IsLimited(addr)) continue; |