@@ -889,6 +889,50 @@ void CheckOffsetDisconnectedPeers(const CNetAddr& ip)
889889
890890static std::list<CNode*> vNodesDisconnected;
891891
892+ static void AcceptConnection (const ListenSocket& hListenSocket) {
893+ struct sockaddr_storage sockaddr;
894+ socklen_t len = sizeof (sockaddr);
895+ SOCKET hSocket = accept (hListenSocket.socket , (struct sockaddr *)&sockaddr, &len);
896+ CAddress addr;
897+ int nInbound = 0 ;
898+
899+ if (hSocket != INVALID_SOCKET )
900+ if (!addr.SetSockAddr ((const struct sockaddr *)&sockaddr))
901+ LogPrintf (" Warning: Unknown socket family\n " );
902+
903+ bool whitelisted = hListenSocket.whitelisted || CNode::IsWhitelistedRange (addr);
904+ {
905+ LOCK (cs_vNodes);
906+ for (CNode* pnode : vNodes)
907+ if (pnode->fInbound )
908+ nInbound++;
909+ }
910+
911+ if (hSocket == INVALID_SOCKET ) {
912+ int nErr = WSAGetLastError ();
913+ if (nErr != WSAEWOULDBLOCK )
914+ LogPrintf (" socket error accept failed: %s\n " , NetworkErrorString (nErr));
915+ } else if (!IsSelectableSocket (hSocket)) {
916+ LogPrintf (" connection from %s dropped: non-selectable socket\n " , addr.ToString ());
917+ CloseSocket (hSocket);
918+ } else if (nInbound >= nMaxConnections - MAX_OUTBOUND_CONNECTIONS ) {
919+ LogPrint (BCLog::NET , " connection from %s dropped (full)\n " , addr.ToString ());
920+ CloseSocket (hSocket);
921+ } else if (CNode::IsBanned (addr) && !whitelisted) {
922+ LogPrintf (" connection from %s dropped (banned)\n " , addr.ToString ());
923+ CloseSocket (hSocket);
924+ } else {
925+ CNode* pnode = new CNode (hSocket, addr, " " , true );
926+ pnode->AddRef ();
927+ pnode->fWhitelisted = whitelisted;
928+
929+ {
930+ LOCK (cs_vNodes);
931+ vNodes.push_back (pnode);
932+ }
933+ }
934+ }
935+
892936void ThreadSocketHandler ()
893937{
894938 unsigned int nPrevNodeCount = 0 ;
@@ -1037,47 +1081,7 @@ void ThreadSocketHandler()
10371081 //
10381082 for (const ListenSocket& hListenSocket : vhListenSocket) {
10391083 if (hListenSocket.socket != INVALID_SOCKET && FD_ISSET (hListenSocket.socket , &fdsetRecv)) {
1040- struct sockaddr_storage sockaddr;
1041- socklen_t len = sizeof (sockaddr);
1042- SOCKET hSocket = accept (hListenSocket.socket , (struct sockaddr *)&sockaddr, &len);
1043- CAddress addr;
1044- int nInbound = 0 ;
1045-
1046- if (hSocket != INVALID_SOCKET )
1047- if (!addr.SetSockAddr ((const struct sockaddr *)&sockaddr))
1048- LogPrintf (" Warning: Unknown socket family\n " );
1049-
1050- bool whitelisted = hListenSocket.whitelisted || CNode::IsWhitelistedRange (addr);
1051- {
1052- LOCK (cs_vNodes);
1053- for (CNode* pnode : vNodes)
1054- if (pnode->fInbound )
1055- nInbound++;
1056- }
1057-
1058- if (hSocket == INVALID_SOCKET ) {
1059- int nErr = WSAGetLastError ();
1060- if (nErr != WSAEWOULDBLOCK )
1061- LogPrintf (" socket error accept failed: %s\n " , NetworkErrorString (nErr));
1062- } else if (!IsSelectableSocket (hSocket)) {
1063- LogPrintf (" connection from %s dropped: non-selectable socket\n " , addr.ToString ());
1064- CloseSocket (hSocket);
1065- } else if (nInbound >= nMaxConnections - MAX_OUTBOUND_CONNECTIONS ) {
1066- LogPrint (BCLog::NET , " connection from %s dropped (full)\n " , addr.ToString ());
1067- CloseSocket (hSocket);
1068- } else if (CNode::IsBanned (addr) && !whitelisted) {
1069- LogPrintf (" connection from %s dropped (banned)\n " , addr.ToString ());
1070- CloseSocket (hSocket);
1071- } else {
1072- CNode* pnode = new CNode (hSocket, addr, " " , true );
1073- pnode->AddRef ();
1074- pnode->fWhitelisted = whitelisted;
1075-
1076- {
1077- LOCK (cs_vNodes);
1078- vNodes.push_back (pnode);
1079- }
1080- }
1084+ AcceptConnection (hListenSocket);
10811085 }
10821086 }
10831087
0 commit comments