MCPcopy Create free account
hub / github.com/LUX-Core/lux / AcceptConnection

Function AcceptConnection

src/net.cpp:860–932  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

858static list<CNode*> vNodesDisconnected;
859
860static void AcceptConnection(const ListenSocket& hListenSocket) {
861
862 struct sockaddr_storage sockaddr;
863 socklen_t len = sizeof(sockaddr);
864 SOCKET hSocket = accept(hListenSocket.socket, (struct sockaddr *) &sockaddr, &len);
865 CAddress addr;
866 int nInbound = 0;
867 int nMaxOutbound = 0;
868 int nMaxInbound = nMaxConnections - (nMaxOutbound);
869
870 if (hSocket != INVALID_SOCKET)
871 if (!addr.SetSockAddr((const struct sockaddr *) &sockaddr))
872 LogPrintf("Warning: Unknown socket family\n");
873
874 bool whitelisted = hListenSocket.whitelisted || CNode::IsWhitelistedRange(addr);
875
876 vector<CNode*> vNodesCopy;
877 {
878 LOCK(cs_vNodes);
879 vNodesCopy = vNodes;
880 }
881
882 for (CNode *pnode : vNodesCopy)
883 if (pnode && pnode->fInbound)
884 nInbound++;
885
886 if (hSocket == INVALID_SOCKET) {
887 int nErr = WSAGetLastError();
888 if (nErr != WSAEWOULDBLOCK)
889 LogPrintf("socket error accept failed: %s\n", NetworkErrorString(nErr));
890 return;
891 }
892
893 if (!IsSelectableSocket(hSocket)) {
894 LogPrintf("connection from %s dropped: non-selectable socket\n", addr.ToString());
895 CloseSocket(hSocket);
896 return;
897 }
898
899 if (CNode::IsBanned(addr) && !whitelisted) {
900 LogPrintf("connection from %s dropped (banned)\n", addr.ToString());
901 CloseSocket(hSocket);
902 return;
903 }
904
905 if (nInbound >= nMaxInbound) {
906 LogPrint("net", "connection from %s dropped (full)\n", addr.ToString());
907 CloseSocket(hSocket);
908 return;
909 }
910
911 if (nInbound >= nMaxConnections - MAX_OUTBOUND_CONNECTIONS) {
912 LogPrint("net", "connection from %s dropped (full)\n", addr.ToString());
913 CloseSocket(hSocket);
914 return;
915 }
916
917 if (!fNetworkActive) {

Callers 1

ThreadSocketHandlerFunction · 0.85

Calls 9

NetworkErrorStringFunction · 0.85
IsSelectableSocketFunction · 0.85
CloseSocketFunction · 0.85
LogPrintFunction · 0.85
printfFunction · 0.85
SetSockAddrMethod · 0.80
AddRefMethod · 0.80
ToStringMethod · 0.45
push_backMethod · 0.45

Tested by

no test coverage detected