@@ -1099,10 +1099,10 @@ bool CConnman::AttemptToEvictConnection()
1099
1099
void CConnman::AcceptConnection (const ListenSocket& hListenSocket) {
1100
1100
struct sockaddr_storage sockaddr;
1101
1101
socklen_t len = sizeof (sockaddr);
1102
- SOCKET hSocket = accept ( hListenSocket.socket , (struct sockaddr *)&sockaddr, &len);
1102
+ auto sock = hListenSocket.sock -> Accept ( (struct sockaddr *)&sockaddr, &len);
1103
1103
CAddress addr;
1104
1104
1105
- if (hSocket == INVALID_SOCKET ) {
1105
+ if (!sock ) {
1106
1106
const int nErr = WSAGetLastError ();
1107
1107
if (nErr != WSAEWOULDBLOCK) {
1108
1108
LogPrintf (" socket error accept failed: %s\n " , NetworkErrorString (nErr));
@@ -1116,15 +1116,15 @@ void CConnman::AcceptConnection(const ListenSocket& hListenSocket) {
1116
1116
addr = CAddress{MaybeFlipIPv6toCJDNS (addr), NODE_NONE};
1117
1117
}
1118
1118
1119
- const CAddress addr_bind{MaybeFlipIPv6toCJDNS (GetBindAddress (hSocket )), NODE_NONE};
1119
+ const CAddress addr_bind{MaybeFlipIPv6toCJDNS (GetBindAddress (sock-> Get () )), NODE_NONE};
1120
1120
1121
1121
NetPermissionFlags permissionFlags = NetPermissionFlags::None;
1122
1122
hListenSocket.AddSocketPermissionFlags (permissionFlags);
1123
1123
1124
- CreateNodeFromAcceptedSocket (hSocket , permissionFlags, addr_bind, addr);
1124
+ CreateNodeFromAcceptedSocket (std::move (sock) , permissionFlags, addr_bind, addr);
1125
1125
}
1126
1126
1127
- void CConnman::CreateNodeFromAcceptedSocket (SOCKET hSocket ,
1127
+ void CConnman::CreateNodeFromAcceptedSocket (std::unique_ptr<Sock>&& sock ,
1128
1128
NetPermissionFlags permissionFlags,
1129
1129
const CAddress& addr_bind,
1130
1130
const CAddress& addr)
@@ -1150,27 +1150,24 @@ void CConnman::CreateNodeFromAcceptedSocket(SOCKET hSocket,
1150
1150
1151
1151
if (!fNetworkActive ) {
1152
1152
LogPrint (BCLog::NET, " connection from %s dropped: not accepting new connections\n " , addr.ToString ());
1153
- CloseSocket (hSocket);
1154
1153
return ;
1155
1154
}
1156
1155
1157
- if (!IsSelectableSocket (hSocket ))
1156
+ if (!IsSelectableSocket (sock-> Get () ))
1158
1157
{
1159
1158
LogPrintf (" connection from %s dropped: non-selectable socket\n " , addr.ToString ());
1160
- CloseSocket (hSocket);
1161
1159
return ;
1162
1160
}
1163
1161
1164
1162
// According to the internet TCP_NODELAY is not carried into accepted sockets
1165
1163
// on all platforms. Set it again here just to be sure.
1166
- SetSocketNoDelay (hSocket );
1164
+ SetSocketNoDelay (sock-> Get () );
1167
1165
1168
1166
// Don't accept connections from banned peers.
1169
1167
bool banned = m_banman && m_banman->IsBanned (addr);
1170
1168
if (!NetPermissions::HasFlag (permissionFlags, NetPermissionFlags::NoBan) && banned)
1171
1169
{
1172
1170
LogPrint (BCLog::NET, " connection from %s dropped (banned)\n " , addr.ToString ());
1173
- CloseSocket (hSocket);
1174
1171
return ;
1175
1172
}
1176
1173
@@ -1179,7 +1176,6 @@ void CConnman::CreateNodeFromAcceptedSocket(SOCKET hSocket,
1179
1176
if (!NetPermissions::HasFlag (permissionFlags, NetPermissionFlags::NoBan) && nInbound + 1 >= nMaxInbound && discouraged)
1180
1177
{
1181
1178
LogPrint (BCLog::NET, " connection from %s dropped (discouraged)\n " , addr.ToString ());
1182
- CloseSocket (hSocket);
1183
1179
return ;
1184
1180
}
1185
1181
@@ -1188,7 +1184,6 @@ void CConnman::CreateNodeFromAcceptedSocket(SOCKET hSocket,
1188
1184
if (!AttemptToEvictConnection ()) {
1189
1185
// No connection to evict, disconnect the new connection
1190
1186
LogPrint (BCLog::NET, " failed to find an eviction candidate - connection dropped (full)\n " );
1191
- CloseSocket (hSocket);
1192
1187
return ;
1193
1188
}
1194
1189
}
@@ -1202,7 +1197,7 @@ void CConnman::CreateNodeFromAcceptedSocket(SOCKET hSocket,
1202
1197
}
1203
1198
1204
1199
const bool inbound_onion = std::find (m_onion_binds.begin (), m_onion_binds.end (), addr_bind) != m_onion_binds.end ();
1205
- CNode* pnode = new CNode (id, nodeServices, hSocket , addr, CalculateKeyedNetGroup (addr), nonce, addr_bind, " " , ConnectionType::INBOUND, inbound_onion);
1200
+ CNode* pnode = new CNode (id, nodeServices, sock-> Release () , addr, CalculateKeyedNetGroup (addr), nonce, addr_bind, " " , ConnectionType::INBOUND, inbound_onion);
1206
1201
pnode->AddRef ();
1207
1202
pnode->m_permissionFlags = permissionFlags;
1208
1203
pnode->m_prefer_evict = discouraged;
@@ -1364,7 +1359,7 @@ bool CConnman::GenerateSelectSet(const std::vector<CNode*>& nodes,
1364
1359
std::set<SOCKET>& error_set)
1365
1360
{
1366
1361
for (const ListenSocket& hListenSocket : vhListenSocket) {
1367
- recv_set.insert (hListenSocket.socket );
1362
+ recv_set.insert (hListenSocket.sock -> Get () );
1368
1363
}
1369
1364
1370
1365
for (CNode* pnode : nodes) {
@@ -1646,7 +1641,7 @@ void CConnman::SocketHandlerListening(const std::set<SOCKET>& recv_set)
1646
1641
if (interruptNet) {
1647
1642
return ;
1648
1643
}
1649
- if (recv_set.count (listen_socket.socket ) > 0 ) {
1644
+ if (recv_set.count (listen_socket.sock -> Get () ) > 0 ) {
1650
1645
AcceptConnection (listen_socket);
1651
1646
}
1652
1647
}
@@ -2335,7 +2330,7 @@ void CConnman::ThreadI2PAcceptIncoming()
2335
2330
continue ;
2336
2331
}
2337
2332
2338
- CreateNodeFromAcceptedSocket (conn.sock -> Release ( ), NetPermissionFlags::None,
2333
+ CreateNodeFromAcceptedSocket (std::move ( conn.sock ), NetPermissionFlags::None,
2339
2334
CAddress{conn.me , NODE_NONE}, CAddress{conn.peer , NODE_NONE});
2340
2335
}
2341
2336
}
@@ -2397,7 +2392,7 @@ bool CConnman::BindListenPort(const CService& addrBind, bilingual_str& strError,
2397
2392
return false ;
2398
2393
}
2399
2394
2400
- vhListenSocket.push_back ( ListenSocket (sock-> Release ( ), permissions) );
2395
+ vhListenSocket.emplace_back ( std::move (sock), permissions);
2401
2396
return true ;
2402
2397
}
2403
2398
@@ -2706,15 +2701,6 @@ void CConnman::StopNodes()
2706
2701
DeleteNode (pnode);
2707
2702
}
2708
2703
2709
- // Close listening sockets.
2710
- for (ListenSocket& hListenSocket : vhListenSocket) {
2711
- if (hListenSocket.socket != INVALID_SOCKET) {
2712
- if (!CloseSocket (hListenSocket.socket )) {
2713
- LogPrintf (" CloseSocket(hListenSocket) failed with error %s\n " , NetworkErrorString (WSAGetLastError ()));
2714
- }
2715
- }
2716
- }
2717
-
2718
2704
for (CNode* pnode : m_nodes_disconnected) {
2719
2705
DeleteNode (pnode);
2720
2706
}
0 commit comments