|
|
@ -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) |
|
|
|
bool GetMyExternalIP2(const CService& addrConnect, const char* pszGet, const char* pszKeyword, CNetAddr& ipRet) |
|
|
|