@@ -1588,7 +1588,7 @@ void CConnman::SocketEventsKqueue(std::set<SOCKET>& recv_set,
1588
1588
timeout.tv_nsec = (only_poll ? 0 : SELECT_TIMEOUT_MILLISECONDS % 1000 ) * 1000 * 1000 ;
1589
1589
1590
1590
wakeupSelectNeeded = true ;
1591
- int n = kevent (kqueuefd , nullptr , 0 , events, maxEvents, &timeout);
1591
+ int n = kevent (Assert (m_edge_trig_events)-> m_fd , nullptr , 0 , events, maxEvents, &timeout);
1592
1592
wakeupSelectNeeded = false ;
1593
1593
if (n == -1 ) {
1594
1594
LogPrintf (" kevent wait error\n " );
@@ -1622,7 +1622,7 @@ void CConnman::SocketEventsEpoll(std::set<SOCKET>& recv_set,
1622
1622
epoll_event events[maxEvents];
1623
1623
1624
1624
wakeupSelectNeeded = true ;
1625
- int n = epoll_wait (epollfd , events, maxEvents, only_poll ? 0 : SELECT_TIMEOUT_MILLISECONDS);
1625
+ int n = epoll_wait (Assert (m_edge_trig_events)-> m_fd , events, maxEvents, only_poll ? 0 : SELECT_TIMEOUT_MILLISECONDS);
1626
1626
wakeupSelectNeeded = false ;
1627
1627
for (int i = 0 ; i < n; i++) {
1628
1628
auto & e = events[i];
@@ -3136,8 +3136,8 @@ bool CConnman::BindListenPort(const CService& addrBind, bilingual_str& strError,
3136
3136
if (socketEventsMode == SocketEventsMode::KQueue) {
3137
3137
struct kevent event;
3138
3138
EV_SET (&event, sock->Get (), EVFILT_READ, EV_ADD, 0 , 0 , nullptr );
3139
- if (kevent (kqueuefd , &event, 1 , nullptr , 0 , nullptr ) != 0 ) {
3140
- strError = strprintf (_ (" Error: failed to add socket to kqueuefd (kevent returned error %s)" ), NetworkErrorString (WSAGetLastError ()));
3139
+ if (kevent (Assert (m_edge_trig_events)-> m_fd , &event, 1 , nullptr , 0 , nullptr ) != 0 ) {
3140
+ strError = strprintf (_ (" Error: failed to add socket to kqueue fd (kevent returned error %s)" ), NetworkErrorString (WSAGetLastError ()));
3141
3141
LogPrintf (" %s\n " , strError.original );
3142
3142
return false ;
3143
3143
}
@@ -3149,8 +3149,8 @@ bool CConnman::BindListenPort(const CService& addrBind, bilingual_str& strError,
3149
3149
epoll_event event;
3150
3150
event.data .fd = sock->Get ();
3151
3151
event.events = EPOLLIN;
3152
- if (epoll_ctl (epollfd , EPOLL_CTL_ADD, sock->Get (), &event) != 0 ) {
3153
- strError = strprintf (_ (" Error: failed to add socket to epollfd (epoll_ctl returned error %s)" ), NetworkErrorString (WSAGetLastError ()));
3152
+ if (epoll_ctl (Assert (m_edge_trig_events)-> m_fd , EPOLL_CTL_ADD, sock->Get (), &event) != 0 ) {
3153
+ strError = strprintf (_ (" Error: failed to add socket to epoll fd (epoll_ctl returned error %s)" ), NetworkErrorString (WSAGetLastError ()));
3154
3154
LogPrintf (" %s\n " , strError.original );
3155
3155
return false ;
3156
3156
}
@@ -3301,25 +3301,14 @@ bool CConnman::Start(CDeterministicMNManager& dmnman, CMasternodeMetaMan& mn_met
3301
3301
AssertLockNotHeld (m_total_bytes_sent_mutex);
3302
3302
Init (connOptions);
3303
3303
3304
- #ifdef USE_KQUEUE
3305
- if (socketEventsMode == SocketEventsMode::KQueue) {
3306
- kqueuefd = kqueue ();
3307
- if (kqueuefd == -1 ) {
3308
- LogPrintf (" kqueue failed\n " );
3309
- return false ;
3310
- }
3311
- }
3312
- #endif
3313
-
3314
- #ifdef USE_EPOLL
3315
- if (socketEventsMode == SocketEventsMode::EPoll) {
3316
- epollfd = epoll_create1 (0 );
3317
- if (epollfd == -1 ) {
3318
- LogPrintf (" epoll_create1 failed\n " );
3304
+ if (socketEventsMode == SocketEventsMode::EPoll || socketEventsMode == SocketEventsMode::KQueue) {
3305
+ m_edge_trig_events = std::make_unique<EdgeTriggeredEvents>(socketEventsMode);
3306
+ if (!m_edge_trig_events->IsValid ()) {
3307
+ LogPrintf (" Unable to initialize EdgeTriggeredEvents instance\n " );
3308
+ m_edge_trig_events.reset ();
3319
3309
return false ;
3320
3310
}
3321
3311
}
3322
- #endif
3323
3312
3324
3313
if (fListen && !InitBinds (connOptions.vBinds , connOptions.vWhiteBinds , connOptions.onion_binds )) {
3325
3314
if (clientInterface) {
@@ -3408,10 +3397,10 @@ bool CConnman::Start(CDeterministicMNManager& dmnman, CMasternodeMetaMan& mn_met
3408
3397
if (socketEventsMode == SocketEventsMode::KQueue) {
3409
3398
struct kevent event;
3410
3399
EV_SET (&event, wakeupPipe[0 ], EVFILT_READ, EV_ADD, 0 , 0 , nullptr );
3411
- int r = kevent (kqueuefd , &event, 1 , nullptr , 0 , nullptr );
3400
+ int r = kevent (Assert (m_edge_trig_events)-> m_fd , &event, 1 , nullptr , 0 , nullptr );
3412
3401
if (r != 0 ) {
3413
3402
LogPrint (BCLog::NET, " %s -- kevent(%d, %d, %d, ...) failed. error: %s\n " , __func__,
3414
- kqueuefd , EV_ADD, wakeupPipe[0 ], NetworkErrorString (WSAGetLastError ()));
3403
+ m_edge_trig_events-> m_fd , EV_ADD, wakeupPipe[0 ], NetworkErrorString (WSAGetLastError ()));
3415
3404
return false ;
3416
3405
}
3417
3406
}
@@ -3421,10 +3410,10 @@ bool CConnman::Start(CDeterministicMNManager& dmnman, CMasternodeMetaMan& mn_met
3421
3410
epoll_event event;
3422
3411
event.events = EPOLLIN;
3423
3412
event.data .fd = wakeupPipe[0 ];
3424
- int r = epoll_ctl (epollfd , EPOLL_CTL_ADD, wakeupPipe[0 ], &event);
3413
+ int r = epoll_ctl (Assert (m_edge_trig_events)-> m_fd , EPOLL_CTL_ADD, wakeupPipe[0 ], &event);
3425
3414
if (r != 0 ) {
3426
3415
LogPrint (BCLog::NET, " %s -- epoll_ctl(%d, %d, %d, ...) failed. error: %s\n " , __func__,
3427
- epollfd , EPOLL_CTL_ADD, wakeupPipe[0 ], NetworkErrorString (WSAGetLastError ()));
3416
+ m_edge_trig_events-> m_fd , EPOLL_CTL_ADD, wakeupPipe[0 ], NetworkErrorString (WSAGetLastError ()));
3428
3417
return false ;
3429
3418
}
3430
3419
}
@@ -3570,12 +3559,12 @@ void CConnman::StopNodes()
3570
3559
if (socketEventsMode == SocketEventsMode::KQueue) {
3571
3560
struct kevent event;
3572
3561
EV_SET (&event, hListenSocket.socket , EVFILT_READ, EV_DELETE, 0 , 0 , nullptr );
3573
- kevent (kqueuefd , &event, 1 , nullptr , 0 , nullptr );
3562
+ kevent (Assert (m_edge_trig_events)-> m_fd , &event, 1 , nullptr , 0 , nullptr );
3574
3563
}
3575
3564
#endif
3576
3565
#ifdef USE_EPOLL
3577
3566
if (socketEventsMode == SocketEventsMode::EPoll) {
3578
- epoll_ctl (epollfd , EPOLL_CTL_DEL, hListenSocket.socket , nullptr );
3567
+ epoll_ctl (Assert (m_edge_trig_events)-> m_fd , EPOLL_CTL_DEL, hListenSocket.socket , nullptr );
3579
3568
}
3580
3569
#endif
3581
3570
if (!CloseSocket (hListenSocket.socket ))
@@ -3606,24 +3595,22 @@ void CConnman::StopNodes()
3606
3595
semAddnode.reset ();
3607
3596
3608
3597
#ifdef USE_KQUEUE
3609
- if (socketEventsMode == SocketEventsMode::KQueue && kqueuefd != -1 ) {
3598
+ if (socketEventsMode == SocketEventsMode::KQueue && Assert (m_edge_trig_events)-> m_fd != -1 ) {
3610
3599
#ifdef USE_WAKEUP_PIPE
3611
3600
struct kevent event;
3612
3601
EV_SET (&event, wakeupPipe[0 ], EVFILT_READ, EV_DELETE, 0 , 0 , nullptr );
3613
- kevent (kqueuefd , &event, 1 , nullptr , 0 , nullptr );
3602
+ kevent (m_edge_trig_events-> m_fd , &event, 1 , nullptr , 0 , nullptr );
3614
3603
#endif
3615
- close (kqueuefd );
3604
+ m_edge_trig_events. reset ( );
3616
3605
}
3617
- kqueuefd = -1 ;
3618
3606
#endif
3619
3607
#ifdef USE_EPOLL
3620
- if (socketEventsMode == SocketEventsMode::EPoll && epollfd != -1 ) {
3608
+ if (socketEventsMode == SocketEventsMode::EPoll && Assert (m_edge_trig_events)-> m_fd != -1 ) {
3621
3609
#ifdef USE_WAKEUP_PIPE
3622
- epoll_ctl (epollfd , EPOLL_CTL_DEL, wakeupPipe[0 ], nullptr );
3610
+ epoll_ctl (m_edge_trig_events-> m_fd , EPOLL_CTL_DEL, wakeupPipe[0 ], nullptr );
3623
3611
#endif
3624
- close (epollfd );
3612
+ m_edge_trig_events. reset ( );
3625
3613
}
3626
- epollfd = -1 ;
3627
3614
#endif
3628
3615
3629
3616
#ifdef USE_WAKEUP_PIPE
@@ -4245,10 +4232,10 @@ void CConnman::RegisterEvents(CNode *pnode)
4245
4232
EV_SET (&events[0 ], pnode->hSocket , EVFILT_READ, EV_ADD, 0 , 0 , nullptr );
4246
4233
EV_SET (&events[1 ], pnode->hSocket , EVFILT_WRITE, EV_ADD | EV_CLEAR, 0 , 0 , nullptr );
4247
4234
4248
- int r = kevent (kqueuefd , events, 2 , nullptr , 0 , nullptr );
4235
+ int r = kevent (Assert (m_edge_trig_events)-> m_fd , events, 2 , nullptr , 0 , nullptr );
4249
4236
if (r != 0 ) {
4250
4237
LogPrint (BCLog::NET, " %s -- kevent(%d, %d, %d, ...) failed. error: %s\n " , __func__,
4251
- kqueuefd , EV_ADD, pnode->hSocket , NetworkErrorString (WSAGetLastError ()));
4238
+ m_edge_trig_events-> m_fd , EV_ADD, pnode->hSocket , NetworkErrorString (WSAGetLastError ()));
4252
4239
}
4253
4240
}
4254
4241
#endif
@@ -4262,10 +4249,10 @@ void CConnman::RegisterEvents(CNode *pnode)
4262
4249
e.events = EPOLLIN | EPOLLOUT | EPOLLET | EPOLLERR | EPOLLHUP;
4263
4250
e.data .fd = pnode->hSocket ;
4264
4251
4265
- int r = epoll_ctl (epollfd , EPOLL_CTL_ADD, pnode->hSocket , &e);
4252
+ int r = epoll_ctl (Assert (m_edge_trig_events)-> m_fd , EPOLL_CTL_ADD, pnode->hSocket , &e);
4266
4253
if (r != 0 ) {
4267
4254
LogPrint (BCLog::NET, " %s -- epoll_ctl(%d, %d, %d, ...) failed. error: %s\n " , __func__,
4268
- epollfd , EPOLL_CTL_ADD, pnode->hSocket , NetworkErrorString (WSAGetLastError ()));
4255
+ m_edge_trig_events-> m_fd , EPOLL_CTL_ADD, pnode->hSocket , NetworkErrorString (WSAGetLastError ()));
4269
4256
}
4270
4257
}
4271
4258
#endif
@@ -4284,10 +4271,10 @@ void CConnman::UnregisterEvents(CNode *pnode)
4284
4271
EV_SET (&events[0 ], pnode->hSocket , EVFILT_READ, EV_DELETE, 0 , 0 , nullptr );
4285
4272
EV_SET (&events[1 ], pnode->hSocket , EVFILT_WRITE, EV_DELETE, 0 , 0 , nullptr );
4286
4273
4287
- int r = kevent (kqueuefd , events, 2 , nullptr , 0 , nullptr );
4274
+ int r = kevent (Assert (m_edge_trig_events)-> m_fd , events, 2 , nullptr , 0 , nullptr );
4288
4275
if (r != 0 ) {
4289
4276
LogPrint (BCLog::NET, " %s -- kevent(%d, %d, %d, ...) failed. error: %s\n " , __func__,
4290
- kqueuefd , EV_DELETE, pnode->hSocket , NetworkErrorString (WSAGetLastError ()));
4277
+ m_edge_trig_events-> m_fd , EV_DELETE, pnode->hSocket , NetworkErrorString (WSAGetLastError ()));
4291
4278
}
4292
4279
}
4293
4280
#endif
@@ -4298,10 +4285,10 @@ void CConnman::UnregisterEvents(CNode *pnode)
4298
4285
return ;
4299
4286
}
4300
4287
4301
- int r = epoll_ctl (epollfd , EPOLL_CTL_DEL, pnode->hSocket , nullptr );
4288
+ int r = epoll_ctl (Assert (m_edge_trig_events)-> m_fd , EPOLL_CTL_DEL, pnode->hSocket , nullptr );
4302
4289
if (r != 0 ) {
4303
4290
LogPrint (BCLog::NET, " %s -- epoll_ctl(%d, %d, %d, ...) failed. error: %s\n " , __func__,
4304
- epollfd , EPOLL_CTL_DEL, pnode->hSocket , NetworkErrorString (WSAGetLastError ()));
4291
+ m_edge_trig_events-> m_fd , EPOLL_CTL_DEL, pnode->hSocket , NetworkErrorString (WSAGetLastError ()));
4305
4292
}
4306
4293
}
4307
4294
#endif
0 commit comments