MCPcopy Create free account
hub / github.com/BTCGPU/BTCGPU / ThreadSocketHandler

Method ThreadSocketHandler

src/net.cpp:1155–1460  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1153}
1154
1155void CConnman::ThreadSocketHandler()
1156{
1157 unsigned int nPrevNodeCount = 0;
1158 while (!interruptNet)
1159 {
1160 //
1161 // Disconnect nodes
1162 //
1163 {
1164 LOCK(cs_vNodes);
1165
1166 if (!fNetworkActive) {
1167 // Disconnect any connected nodes
1168 for (CNode* pnode : vNodes) {
1169 if (!pnode->fDisconnect) {
1170 LogPrint(BCLog::NET, "Network not active, dropping peer=%d\n", pnode->GetId());
1171 pnode->fDisconnect = true;
1172 }
1173 }
1174 }
1175
1176 // Disconnect unused nodes
1177 std::vector<CNode*> vNodesCopy = vNodes;
1178 for (CNode* pnode : vNodesCopy)
1179 {
1180 if (pnode->fDisconnect)
1181 {
1182 // remove from vNodes
1183 vNodes.erase(remove(vNodes.begin(), vNodes.end(), pnode), vNodes.end());
1184
1185 // release outbound grant (if any)
1186 pnode->grantOutbound.Release();
1187
1188 // close socket and cleanup
1189 pnode->CloseSocketDisconnect();
1190
1191 // hold in disconnected pool until all refs are released
1192 pnode->Release();
1193 vNodesDisconnected.push_back(pnode);
1194 }
1195 }
1196 }
1197 {
1198 // Delete disconnected nodes
1199 std::list<CNode*> vNodesDisconnectedCopy = vNodesDisconnected;
1200 for (CNode* pnode : vNodesDisconnectedCopy)
1201 {
1202 // wait until threads are done using it
1203 if (pnode->GetRefCount() <= 0) {
1204 bool fDelete = false;
1205 {
1206 TRY_LOCK(pnode->cs_inventory, lockInv);
1207 if (lockInv) {
1208 TRY_LOCK(pnode->cs_vSend, lockSend);
1209 if (lockSend) {
1210 fDelete = true;
1211 }
1212 }

Callers

nothing calls this directly

Calls 15

maxFunction · 0.85
NetworkErrorStringFunction · 0.85
GetSystemTimeInSecondsFunction · 0.85
GetTimeMicrosFunction · 0.85
GetIdMethod · 0.80
CloseSocketDisconnectMethod · 0.80
GetRefCountMethod · 0.80
sleep_forMethod · 0.80
AddRefMethod · 0.80
ReceiveMsgBytesMethod · 0.80
completeMethod · 0.80
eraseMethod · 0.45

Tested by

no test coverage detected