Changeset View
Changeset View
Standalone View
Standalone View
src/net.cpp
Show First 20 Lines • Show All 1,299 Lines • ▼ Show 20 Lines | void CConnman::NotifyNumConnectionsChanged() { | ||||
if (vNodesSize != nPrevNodeCount) { | if (vNodesSize != nPrevNodeCount) { | ||||
nPrevNodeCount = vNodesSize; | nPrevNodeCount = vNodesSize; | ||||
if (clientInterface) { | if (clientInterface) { | ||||
clientInterface->NotifyNumConnectionsChanged(vNodesSize); | clientInterface->NotifyNumConnectionsChanged(vNodesSize); | ||||
} | } | ||||
} | } | ||||
} | } | ||||
void CConnman::InactivityCheck(CNode *pnode) { | |||||
int64_t nTime = GetSystemTimeInSeconds(); | |||||
if (nTime - pnode->nTimeConnected > 60) { | |||||
if (pnode->nLastRecv == 0 || pnode->nLastSend == 0) { | |||||
LogPrint(BCLog::NET, | |||||
"socket no message in first 60 seconds, %d %d from %d\n", | |||||
pnode->nLastRecv != 0, pnode->nLastSend != 0, | |||||
pnode->GetId()); | |||||
pnode->fDisconnect = true; | |||||
} else if (nTime - pnode->nLastSend > TIMEOUT_INTERVAL) { | |||||
LogPrintf("socket sending timeout: %is\n", | |||||
nTime - pnode->nLastSend); | |||||
pnode->fDisconnect = true; | |||||
} else if (nTime - pnode->nLastRecv > (pnode->nVersion > BIP0031_VERSION | |||||
? TIMEOUT_INTERVAL | |||||
: 90 * 60)) { | |||||
LogPrintf("socket receive timeout: %is\n", | |||||
nTime - pnode->nLastRecv); | |||||
pnode->fDisconnect = true; | |||||
} else if (pnode->nPingNonceSent && | |||||
pnode->nPingUsecStart + TIMEOUT_INTERVAL * 1000000 < | |||||
GetTimeMicros()) { | |||||
LogPrintf("ping timeout: %fs\n", | |||||
0.000001 * (GetTimeMicros() - pnode->nPingUsecStart)); | |||||
pnode->fDisconnect = true; | |||||
} else if (!pnode->fSuccessfullyConnected) { | |||||
LogPrint(BCLog::NET, "version handshake timeout from %d\n", | |||||
pnode->GetId()); | |||||
pnode->fDisconnect = true; | |||||
} | |||||
} | |||||
} | |||||
void CConnman::ThreadSocketHandler() { | void CConnman::ThreadSocketHandler() { | ||||
while (!interruptNet) { | while (!interruptNet) { | ||||
DisconnectNodes(); | DisconnectNodes(); | ||||
NotifyNumConnectionsChanged(); | NotifyNumConnectionsChanged(); | ||||
// | // | ||||
// Find which sockets have data to receive | // Find which sockets have data to receive | ||||
// | // | ||||
▲ Show 20 Lines • Show All 187 Lines • ▼ Show 20 Lines | while (!interruptNet) { | ||||
if (sendSet) { | if (sendSet) { | ||||
LOCK(pnode->cs_vSend); | LOCK(pnode->cs_vSend); | ||||
size_t nBytes = SocketSendData(pnode); | size_t nBytes = SocketSendData(pnode); | ||||
if (nBytes) { | if (nBytes) { | ||||
RecordBytesSent(nBytes); | RecordBytesSent(nBytes); | ||||
} | } | ||||
} | } | ||||
// | InactivityCheck(pnode); | ||||
// Inactivity checking | |||||
// | |||||
int64_t nTime = GetSystemTimeInSeconds(); | |||||
if (nTime - pnode->nTimeConnected > 60) { | |||||
if (pnode->nLastRecv == 0 || pnode->nLastSend == 0) { | |||||
LogPrint(BCLog::NET, | |||||
"socket no message in first 60 seconds, %d %d " | |||||
"from %d\n", | |||||
pnode->nLastRecv != 0, pnode->nLastSend != 0, | |||||
pnode->GetId()); | |||||
pnode->fDisconnect = true; | |||||
} else if (nTime - pnode->nLastSend > TIMEOUT_INTERVAL) { | |||||
LogPrintf("socket sending timeout: %is\n", | |||||
nTime - pnode->nLastSend); | |||||
pnode->fDisconnect = true; | |||||
} else if (nTime - pnode->nLastRecv > | |||||
(pnode->nVersion > BIP0031_VERSION ? TIMEOUT_INTERVAL | |||||
: 90 * 60)) { | |||||
LogPrintf("socket receive timeout: %is\n", | |||||
nTime - pnode->nLastRecv); | |||||
pnode->fDisconnect = true; | |||||
} else if (pnode->nPingNonceSent && | |||||
pnode->nPingUsecStart + TIMEOUT_INTERVAL * 1000000 < | |||||
GetTimeMicros()) { | |||||
LogPrintf("ping timeout: %fs\n", | |||||
0.000001 * | |||||
(GetTimeMicros() - pnode->nPingUsecStart)); | |||||
pnode->fDisconnect = true; | |||||
} else if (!pnode->fSuccessfullyConnected) { | |||||
LogPrint(BCLog::NET, "version handshake timeout from %d\n", | |||||
pnode->GetId()); | |||||
pnode->fDisconnect = true; | |||||
} | |||||
} | |||||
} | } | ||||
{ | { | ||||
LOCK(cs_vNodes); | LOCK(cs_vNodes); | ||||
for (CNode *pnode : vNodesCopy) { | for (CNode *pnode : vNodesCopy) { | ||||
pnode->Release(); | pnode->Release(); | ||||
} | } | ||||
} | } | ||||
} | } | ||||
▲ Show 20 Lines • Show All 1,569 Lines • Show Last 20 Lines |