diff options
author | s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b> | 2010-08-09 20:00:17 +0000 |
---|---|---|
committer | s_nakamoto <s_nakamoto@1a98c847-1fd6-4fd8-948a-caf3550aa51b> | 2010-08-09 20:00:17 +0000 |
commit | 94cfec07fd302c9ff9b6a80c47418d4fe56596ae (patch) | |
tree | 523576f7c5a15937e436e94f2b0b77dc19c70f54 | |
parent | e6b7ab57496c9267c5d0bbad2be8e942a01731dc (diff) |
always make 8 outbound connections even if have inbound,
limit one outbound connection per a.b.?.? range,
switch -maxconnections=#
git-svn-id: https://bitcoin.svn.sourceforge.net/svnroot/bitcoin/trunk@125 1a98c847-1fd6-4fd8-948a-caf3550aa51b
-rw-r--r-- | main.cpp | 2 | ||||
-rw-r--r-- | net.cpp | 28 | ||||
-rw-r--r-- | serialize.h | 2 | ||||
-rw-r--r-- | ui.cpp | 2 |
4 files changed, 25 insertions, 9 deletions
@@ -885,7 +885,7 @@ void Lockdown(CBlockIndex* pindexNew) printf("Lockdown: current best=%s height=%d work=%s\n", hashBestChain.ToString().substr(0,22).c_str(), nBestHeight, bnBestChainWork.ToString().c_str());
printf("Lockdown: IsLockdown()=%d\n", (IsLockdown() ? 1 : 0));
if (IsLockdown())
- printf("Lockdown: WARNING: Displayed transactions may not be correct! You may need to upgrade.\n");
+ printf("Lockdown: WARNING: Displayed transactions may not be correct! You may need to upgrade, or other nodes may need to upgrade.\n");
}
@@ -4,6 +4,8 @@ #include "headers.h"
+static const int MAX_OUTBOUND_CONNECTIONS = 8;
+
void ThreadMessageHandler2(void* parg);
void ThreadSocketHandler2(void* parg);
void ThreadOpenConnections2(void* parg);
@@ -653,6 +655,10 @@ void ThreadSocketHandler2(void* parg) if (WSAGetLastError() != WSAEWOULDBLOCK)
printf("socket error accept failed: %d\n", WSAGetLastError());
}
+ else if (mapArgs.count("-maxconnections") && (int)vNodes.size() >= atoi(mapArgs["-maxconnections"]) - MAX_OUTBOUND_CONNECTIONS)
+ {
+ closesocket(hSocket);
+ }
else
{
printf("accepted connection %s\n", addr.ToStringLog().c_str());
@@ -879,12 +885,21 @@ void ThreadOpenConnections2(void* parg) int64 nStart = GetTime();
loop
{
- // Wait
+ // Limit outbound connections
vnThreadsRunning[1]--;
Sleep(500);
- const int nMaxConnections = 8;
- while (vNodes.size() >= nMaxConnections)
+ loop
{
+ int nOutbound = 0;
+ CRITICAL_BLOCK(cs_vNodes)
+ foreach(CNode* pnode, vNodes)
+ if (!pnode->fInbound)
+ nOutbound++;
+ int nMaxOutboundConnections = MAX_OUTBOUND_CONNECTIONS;
+ if (mapArgs.count("-maxconnections"))
+ nMaxOutboundConnections = min(nMaxOutboundConnections, atoi(mapArgs["-maxconnections"]));
+ if (nOutbound < nMaxOutboundConnections)
+ break;
Sleep(2000);
if (fShutdown)
return;
@@ -948,18 +963,19 @@ void ThreadOpenConnections2(void* parg) CAddress addrConnect;
int64 nBest = INT64_MIN;
- // Do this here so we don't have to critsect vNodes inside mapAddresses critsect
+ // Only connect to one address per a.b.?.? range.
+ // Do this here so we don't have to critsect vNodes inside mapAddresses critsect.
set<unsigned int> setConnected;
CRITICAL_BLOCK(cs_vNodes)
foreach(CNode* pnode, vNodes)
- setConnected.insert(pnode->addr.ip);
+ setConnected.insert(pnode->addr.ip & 0x0000ffff);
CRITICAL_BLOCK(cs_mapAddresses)
{
foreach(const PAIRTYPE(vector<unsigned char>, CAddress)& item, mapAddresses)
{
const CAddress& addr = item.second;
- if (!addr.IsIPv4() || !addr.IsValid() || setConnected.count(addr.ip))
+ if (!addr.IsIPv4() || !addr.IsValid() || setConnected.count(addr.ip & 0x0000ffff))
continue;
int64 nSinceLastSeen = GetAdjustedTime() - addr.nTime;
int64 nSinceLastTry = GetAdjustedTime() - addr.nLastTry;
diff --git a/serialize.h b/serialize.h index 50e15c1013..6120a360e2 100644 --- a/serialize.h +++ b/serialize.h @@ -20,7 +20,7 @@ class CDataStream; class CAutoFile;
static const int VERSION = 308;
-static const char* pszSubVer = ".1";
+static const char* pszSubVer = ".2";
@@ -1015,7 +1015,7 @@ void CMainFrame::OnPaintListCtrl(wxPaintEvent& event) // Update status bar
static bool fPrevLockdown;
if (IsLockdown())
- m_statusBar->SetStatusText(string(" ") + _("WARNING: Displayed transactions may not be correct! You may need to upgrade."), 0);
+ m_statusBar->SetStatusText(string(" ") + _("WARNING: Displayed transactions may not be correct! You may need to upgrade, or other nodes may need to upgrade."), 0);
else if (fPrevLockdown)
m_statusBar->SetStatusText("", 0);
fPrevLockdown = IsLockdown();
|