Fix infinite loops in connection logic

This commit is contained in:
Pieter Wuille 2012-08-21 17:32:04 +02:00
parent f39ab4c8d0
commit f161a2c211
2 changed files with 8 additions and 2 deletions

View file

@ -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);

View file

@ -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;