@@ -1307,7 +1307,7 @@ bool CConnman::GenerateSelectSet(std::set<SOCKET> &recv_set, std::set<SOCKET> &s
1307
1307
return !recv_set.empty () || !send_set.empty () || !error_set.empty ();
1308
1308
}
1309
1309
1310
- void CConnman::SocketHandler ( )
1310
+ void CConnman::SocketEvents (std::set<SOCKET> &recv_set, std::set<SOCKET> &send_set, std::set<SOCKET> &error_set )
1311
1311
{
1312
1312
std::set<SOCKET> recv_select_set, send_select_set, error_select_set;
1313
1313
if (!GenerateSelectSet (recv_select_set, send_select_set, error_select_set)) {
@@ -1362,12 +1362,38 @@ void CConnman::SocketHandler()
1362
1362
return ;
1363
1363
}
1364
1364
1365
+ for (SOCKET hSocket : recv_select_set) {
1366
+ if (FD_ISSET (hSocket, &fdsetRecv)) {
1367
+ recv_set.insert (hSocket);
1368
+ }
1369
+ }
1370
+
1371
+ for (SOCKET hSocket : send_select_set) {
1372
+ if (FD_ISSET (hSocket, &fdsetSend)) {
1373
+ send_set.insert (hSocket);
1374
+ }
1375
+ }
1376
+
1377
+ for (SOCKET hSocket : error_select_set) {
1378
+ if (FD_ISSET (hSocket, &fdsetError)) {
1379
+ error_set.insert (hSocket);
1380
+ }
1381
+ }
1382
+ }
1383
+
1384
+ void CConnman::SocketHandler ()
1385
+ {
1386
+ std::set<SOCKET> recv_set, send_set, error_set;
1387
+ SocketEvents (recv_set, send_set, error_set);
1388
+
1389
+ if (interruptNet) return ;
1390
+
1365
1391
//
1366
1392
// Accept new connections
1367
1393
//
1368
1394
for (const ListenSocket& hListenSocket : vhListenSocket)
1369
1395
{
1370
- if (hListenSocket.socket != INVALID_SOCKET && FD_ISSET (hListenSocket.socket , &fdsetRecv) )
1396
+ if (hListenSocket.socket != INVALID_SOCKET && recv_set. count (hListenSocket.socket ) > 0 )
1371
1397
{
1372
1398
AcceptConnection (hListenSocket);
1373
1399
}
@@ -1398,9 +1424,9 @@ void CConnman::SocketHandler()
1398
1424
LOCK (pnode->cs_hSocket );
1399
1425
if (pnode->hSocket == INVALID_SOCKET)
1400
1426
continue ;
1401
- recvSet = FD_ISSET (pnode->hSocket , &fdsetRecv) ;
1402
- sendSet = FD_ISSET (pnode->hSocket , &fdsetSend) ;
1403
- errorSet = FD_ISSET (pnode->hSocket , &fdsetError) ;
1427
+ recvSet = recv_set. count (pnode->hSocket ) > 0 ;
1428
+ sendSet = send_set. count (pnode->hSocket ) > 0 ;
1429
+ errorSet = error_set. count (pnode->hSocket ) > 0 ;
1404
1430
}
1405
1431
if (recvSet || errorSet)
1406
1432
{
0 commit comments