Skip to content

Commit 411766d

Browse files
Patrick StratemanFuzzbawls
authored andcommitted
Refactor: AcceptConnection
1 parent 129563c commit 411766d

1 file changed

Lines changed: 45 additions & 41 deletions

File tree

src/net.cpp

Lines changed: 45 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -889,6 +889,50 @@ void CheckOffsetDisconnectedPeers(const CNetAddr& ip)
889889

890890
static 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+
892936
void 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

Comments
 (0)