mirror of
https://github.com/bitcoin/bitcoin.git
synced 2024-11-19 18:09:47 +01:00
Prevent duplicate connections where one is by name and another by ip
This commit is contained in:
parent
1111b80df8
commit
f9f5cfc506
20
src/net.cpp
20
src/net.cpp
@ -400,6 +400,26 @@ CNode* ConnectNode(CAddress addrConnect, const char *pszDest, bool fCountFailure
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (pszDest && addrConnect.IsValid()) {
|
||||
// It is possible that we already have a connection to the IP/port pszDest resolved to.
|
||||
// In that case, drop the connection that was just created, and return the existing CNode instead.
|
||||
// Also store the name we used to connect in that CNode, so that future FindNode() calls to that
|
||||
// name catch this early.
|
||||
CNode* pnode = FindNode((CService)addrConnect);
|
||||
if (pnode)
|
||||
{
|
||||
pnode->AddRef();
|
||||
{
|
||||
LOCK(cs_vNodes);
|
||||
if (pnode->addrName.empty()) {
|
||||
pnode->addrName = std::string(pszDest);
|
||||
}
|
||||
}
|
||||
CloseSocket(hSocket);
|
||||
return pnode;
|
||||
}
|
||||
}
|
||||
|
||||
addrman.Attempt(addrConnect, fCountFailure);
|
||||
|
||||
// Add node
|
||||
|
Loading…
Reference in New Issue
Block a user