|
|
|
@ -83,6 +83,57 @@ void CNode::PushGetBlocks(CBlockIndex* pindexBegin, uint256 hashEnd)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
bool RecvLine(SOCKET hSocket, string& strLine)
|
|
|
|
|
{
|
|
|
|
|
strLine = "";
|
|
|
|
|
loop
|
|
|
|
|
{
|
|
|
|
|
char c;
|
|
|
|
|
int nBytes = recv(hSocket, &c, 1, 0);
|
|
|
|
|
if (nBytes > 0)
|
|
|
|
|
{
|
|
|
|
|
if (c == '\n')
|
|
|
|
|
continue;
|
|
|
|
|
if (c == '\r')
|
|
|
|
|
return true;
|
|
|
|
|
strLine += c;
|
|
|
|
|
if (strLine.size() >= 9000)
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
else if (nBytes <= 0)
|
|
|
|
|
{
|
|
|
|
|
if (fShutdown)
|
|
|
|
|
return false;
|
|
|
|
|
if (nBytes < 0)
|
|
|
|
|
{
|
|
|
|
|
int nErr = WSAGetLastError();
|
|
|
|
|
if (nErr == WSAEMSGSIZE)
|
|
|
|
|
continue;
|
|
|
|
|
if (nErr == WSAEWOULDBLOCK || nErr == WSAEINTR || nErr == WSAEINPROGRESS)
|
|
|
|
|
{
|
|
|
|
|
Sleep(10);
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (!strLine.empty())
|
|
|
|
|
return true;
|
|
|
|
|
if (nBytes == 0)
|
|
|
|
|
{
|
|
|
|
|
// socket closed
|
|
|
|
|
printf("socket closed\n");
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
// socket error
|
|
|
|
|
int nErr = WSAGetLastError();
|
|
|
|
|
printf("recv failed: %d\n", nErr);
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
bool GetMyExternalIP2(const CService& addrConnect, const char* pszGet, const char* pszKeyword, CNetAddr& ipRet)
|
|
|
|
|