mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-02-09 10:43:19 -05:00
Merge pull request #5408
35e408f
Regard connection failures as attempt for addrman (Wladimir J. van der Laan)
This commit is contained in:
commit
800458eddd
3 changed files with 25 additions and 7 deletions
|
@ -399,7 +399,9 @@ CNode* ConnectNode(CAddress addrConnect, const char *pszDest)
|
||||||
|
|
||||||
// Connect
|
// Connect
|
||||||
SOCKET hSocket;
|
SOCKET hSocket;
|
||||||
if (pszDest ? ConnectSocketByName(addrConnect, hSocket, pszDest, Params().GetDefaultPort()) : ConnectSocket(addrConnect, hSocket))
|
bool proxyConnectionFailed = false;
|
||||||
|
if (pszDest ? ConnectSocketByName(addrConnect, hSocket, pszDest, Params().GetDefaultPort(), nConnectTimeout, &proxyConnectionFailed) :
|
||||||
|
ConnectSocket(addrConnect, hSocket, nConnectTimeout, &proxyConnectionFailed))
|
||||||
{
|
{
|
||||||
addrman.Attempt(addrConnect);
|
addrman.Attempt(addrConnect);
|
||||||
|
|
||||||
|
@ -415,6 +417,10 @@ CNode* ConnectNode(CAddress addrConnect, const char *pszDest)
|
||||||
pnode->nTimeConnected = GetTime();
|
pnode->nTimeConnected = GetTime();
|
||||||
|
|
||||||
return pnode;
|
return pnode;
|
||||||
|
} else if (!proxyConnectionFailed) {
|
||||||
|
// If connecting to the node failed, and failure is not caused by a problem connecting to
|
||||||
|
// the proxy, mark this as an attempt.
|
||||||
|
addrman.Attempt(addrConnect);
|
||||||
}
|
}
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
|
@ -519,9 +519,11 @@ bool IsProxy(const CNetAddr &addr) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ConnectSocket(const CService &addrDest, SOCKET& hSocketRet, int nTimeout)
|
bool ConnectSocket(const CService &addrDest, SOCKET& hSocketRet, int nTimeout, bool *outProxyConnectionFailed)
|
||||||
{
|
{
|
||||||
proxyType proxy;
|
proxyType proxy;
|
||||||
|
if (outProxyConnectionFailed)
|
||||||
|
*outProxyConnectionFailed = false;
|
||||||
// no proxy needed (none set for target network)
|
// no proxy needed (none set for target network)
|
||||||
if (!GetProxy(addrDest.GetNetwork(), proxy))
|
if (!GetProxy(addrDest.GetNetwork(), proxy))
|
||||||
return ConnectSocketDirectly(addrDest, hSocketRet, nTimeout);
|
return ConnectSocketDirectly(addrDest, hSocketRet, nTimeout);
|
||||||
|
@ -529,8 +531,11 @@ bool ConnectSocket(const CService &addrDest, SOCKET& hSocketRet, int nTimeout)
|
||||||
SOCKET hSocket = INVALID_SOCKET;
|
SOCKET hSocket = INVALID_SOCKET;
|
||||||
|
|
||||||
// first connect to proxy server
|
// first connect to proxy server
|
||||||
if (!ConnectSocketDirectly(proxy, hSocket, nTimeout))
|
if (!ConnectSocketDirectly(proxy, hSocket, nTimeout)) {
|
||||||
|
if (outProxyConnectionFailed)
|
||||||
|
*outProxyConnectionFailed = true;
|
||||||
return false;
|
return false;
|
||||||
|
}
|
||||||
// do socks negotiation
|
// do socks negotiation
|
||||||
if (!Socks5(addrDest.ToStringIP(), addrDest.GetPort(), hSocket))
|
if (!Socks5(addrDest.ToStringIP(), addrDest.GetPort(), hSocket))
|
||||||
return false;
|
return false;
|
||||||
|
@ -539,10 +544,14 @@ bool ConnectSocket(const CService &addrDest, SOCKET& hSocketRet, int nTimeout)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ConnectSocketByName(CService &addr, SOCKET& hSocketRet, const char *pszDest, int portDefault, int nTimeout)
|
bool ConnectSocketByName(CService &addr, SOCKET& hSocketRet, const char *pszDest, int portDefault, int nTimeout, bool *outProxyConnectionFailed)
|
||||||
{
|
{
|
||||||
string strDest;
|
string strDest;
|
||||||
int port = portDefault;
|
int port = portDefault;
|
||||||
|
|
||||||
|
if (outProxyConnectionFailed)
|
||||||
|
*outProxyConnectionFailed = false;
|
||||||
|
|
||||||
SplitHostPort(string(pszDest), port, strDest);
|
SplitHostPort(string(pszDest), port, strDest);
|
||||||
|
|
||||||
SOCKET hSocket = INVALID_SOCKET;
|
SOCKET hSocket = INVALID_SOCKET;
|
||||||
|
@ -561,8 +570,11 @@ bool ConnectSocketByName(CService &addr, SOCKET& hSocketRet, const char *pszDest
|
||||||
if (!HaveNameProxy())
|
if (!HaveNameProxy())
|
||||||
return false;
|
return false;
|
||||||
// first connect to name proxy server
|
// first connect to name proxy server
|
||||||
if (!ConnectSocketDirectly(nameProxy, hSocket, nTimeout))
|
if (!ConnectSocketDirectly(nameProxy, hSocket, nTimeout)) {
|
||||||
|
if (outProxyConnectionFailed)
|
||||||
|
*outProxyConnectionFailed = true;
|
||||||
return false;
|
return false;
|
||||||
|
}
|
||||||
// do socks negotiation
|
// do socks negotiation
|
||||||
if (!Socks5(strDest, (unsigned short)port, hSocket))
|
if (!Socks5(strDest, (unsigned short)port, hSocket))
|
||||||
return false;
|
return false;
|
||||||
|
|
|
@ -182,8 +182,8 @@ bool LookupHost(const char *pszName, std::vector<CNetAddr>& vIP, unsigned int nM
|
||||||
bool Lookup(const char *pszName, CService& addr, int portDefault = 0, bool fAllowLookup = true);
|
bool Lookup(const char *pszName, CService& addr, int portDefault = 0, bool fAllowLookup = true);
|
||||||
bool Lookup(const char *pszName, std::vector<CService>& vAddr, int portDefault = 0, bool fAllowLookup = true, unsigned int nMaxSolutions = 0);
|
bool Lookup(const char *pszName, std::vector<CService>& vAddr, int portDefault = 0, bool fAllowLookup = true, unsigned int nMaxSolutions = 0);
|
||||||
bool LookupNumeric(const char *pszName, CService& addr, int portDefault = 0);
|
bool LookupNumeric(const char *pszName, CService& addr, int portDefault = 0);
|
||||||
bool ConnectSocket(const CService &addr, SOCKET& hSocketRet, int nTimeout = nConnectTimeout);
|
bool ConnectSocket(const CService &addr, SOCKET& hSocketRet, int nTimeout, bool *outProxyConnectionFailed = 0);
|
||||||
bool ConnectSocketByName(CService &addr, SOCKET& hSocketRet, const char *pszDest, int portDefault = 0, int nTimeout = nConnectTimeout);
|
bool ConnectSocketByName(CService &addr, SOCKET& hSocketRet, const char *pszDest, int portDefault, int nTimeout, bool *outProxyConnectionFailed = 0);
|
||||||
/** Return readable error string for a network error code */
|
/** Return readable error string for a network error code */
|
||||||
std::string NetworkErrorString(int err);
|
std::string NetworkErrorString(int err);
|
||||||
/** Close socket and set hSocket to INVALID_SOCKET */
|
/** Close socket and set hSocket to INVALID_SOCKET */
|
||||||
|
|
Loading…
Add table
Reference in a new issue