@@ -563,7 +563,9 @@ void CNode::CloseSocketDisconnect(CConnman* connman)
563
563
}
564
564
}
565
565
566
- connman->UnregisterEvents (this );
566
+ if (connman->m_edge_trig_events && !connman->m_edge_trig_events ->UnregisterEvents (hSocket)) {
567
+ LogPrint (BCLog::NET, " EdgeTriggeredEvents::UnregisterEvents() failed\n " );
568
+ }
567
569
568
570
LogPrint (BCLog::NET, " disconnecting peer=%d\n " , id);
569
571
CloseSocket (hSocket);
@@ -1276,7 +1278,12 @@ void CConnman::CreateNodeFromAcceptedSocket(SOCKET hSocket,
1276
1278
LOCK (m_nodes_mutex);
1277
1279
m_nodes.push_back (pnode);
1278
1280
WITH_LOCK (cs_mapSocketToNode, mapSocketToNode.emplace (hSocket, pnode));
1279
- RegisterEvents (pnode);
1281
+ if (m_edge_trig_events) {
1282
+ LOCK (pnode->cs_hSocket );
1283
+ if (!m_edge_trig_events->RegisterEvents (pnode->hSocket )) {
1284
+ LogPrint (BCLog::NET, " EdgeTriggeredEvents::RegisterEvents() failed\n " );
1285
+ }
1286
+ }
1280
1287
WakeSelect ();
1281
1288
}
1282
1289
@@ -2980,7 +2987,12 @@ void CConnman::OpenNetworkConnection(const CAddress& addrConnect, bool fCountFai
2980
2987
{
2981
2988
LOCK (m_nodes_mutex);
2982
2989
m_nodes.push_back (pnode);
2983
- RegisterEvents (pnode);
2990
+ if (m_edge_trig_events) {
2991
+ LOCK (pnode->cs_hSocket );
2992
+ if (!m_edge_trig_events->RegisterEvents (pnode->hSocket )) {
2993
+ LogPrint (BCLog::NET, " EdgeTriggeredEvents::RegisterEvents() failed\n " );
2994
+ }
2995
+ }
2984
2996
WakeSelect ();
2985
2997
}
2986
2998
}
@@ -4193,79 +4205,6 @@ uint64_t CConnman::CalculateKeyedNetGroup(const CAddress& ad) const
4193
4205
return GetDeterministicRandomizer (RANDOMIZER_ID_NETGROUP).Write (vchNetGroup.data (), vchNetGroup.size ()).Finalize ();
4194
4206
}
4195
4207
4196
- void CConnman::RegisterEvents (CNode *pnode)
4197
- {
4198
- #ifdef USE_KQUEUE
4199
- if (socketEventsMode == SocketEventsMode::KQueue) {
4200
- LOCK (pnode->cs_hSocket );
4201
- assert (pnode->hSocket != INVALID_SOCKET);
4202
-
4203
- struct kevent events[2 ];
4204
- EV_SET (&events[0 ], pnode->hSocket , EVFILT_READ, EV_ADD, 0 , 0 , nullptr );
4205
- EV_SET (&events[1 ], pnode->hSocket , EVFILT_WRITE, EV_ADD | EV_CLEAR, 0 , 0 , nullptr );
4206
-
4207
- int r = kevent (Assert (m_edge_trig_events)->m_fd , events, 2 , nullptr , 0 , nullptr );
4208
- if (r != 0 ) {
4209
- LogPrint (BCLog::NET, " %s -- kevent(%d, %d, %d, ...) failed. error: %s\n " , __func__,
4210
- m_edge_trig_events->m_fd , EV_ADD, pnode->hSocket , NetworkErrorString (WSAGetLastError ()));
4211
- }
4212
- }
4213
- #endif
4214
- #ifdef USE_EPOLL
4215
- if (socketEventsMode == SocketEventsMode::EPoll) {
4216
- LOCK (pnode->cs_hSocket );
4217
- assert (pnode->hSocket != INVALID_SOCKET);
4218
-
4219
- epoll_event e;
4220
- // We're using edge-triggered mode, so it's important that we drain sockets even if no signals come in
4221
- e.events = EPOLLIN | EPOLLOUT | EPOLLET | EPOLLERR | EPOLLHUP;
4222
- e.data .fd = pnode->hSocket ;
4223
-
4224
- int r = epoll_ctl (Assert (m_edge_trig_events)->m_fd , EPOLL_CTL_ADD, pnode->hSocket , &e);
4225
- if (r != 0 ) {
4226
- LogPrint (BCLog::NET, " %s -- epoll_ctl(%d, %d, %d, ...) failed. error: %s\n " , __func__,
4227
- m_edge_trig_events->m_fd , EPOLL_CTL_ADD, pnode->hSocket , NetworkErrorString (WSAGetLastError ()));
4228
- }
4229
- }
4230
- #endif
4231
- }
4232
-
4233
- void CConnman::UnregisterEvents (CNode *pnode)
4234
- {
4235
- #ifdef USE_KQUEUE
4236
- if (socketEventsMode == SocketEventsMode::KQueue) {
4237
- AssertLockHeld (pnode->cs_hSocket );
4238
- if (pnode->hSocket == INVALID_SOCKET) {
4239
- return ;
4240
- }
4241
-
4242
- struct kevent events[2 ];
4243
- EV_SET (&events[0 ], pnode->hSocket , EVFILT_READ, EV_DELETE, 0 , 0 , nullptr );
4244
- EV_SET (&events[1 ], pnode->hSocket , EVFILT_WRITE, EV_DELETE, 0 , 0 , nullptr );
4245
-
4246
- int r = kevent (Assert (m_edge_trig_events)->m_fd , events, 2 , nullptr , 0 , nullptr );
4247
- if (r != 0 ) {
4248
- LogPrint (BCLog::NET, " %s -- kevent(%d, %d, %d, ...) failed. error: %s\n " , __func__,
4249
- m_edge_trig_events->m_fd , EV_DELETE, pnode->hSocket , NetworkErrorString (WSAGetLastError ()));
4250
- }
4251
- }
4252
- #endif
4253
- #ifdef USE_EPOLL
4254
- if (socketEventsMode == SocketEventsMode::EPoll) {
4255
- AssertLockHeld (pnode->cs_hSocket );
4256
- if (pnode->hSocket == INVALID_SOCKET) {
4257
- return ;
4258
- }
4259
-
4260
- int r = epoll_ctl (Assert (m_edge_trig_events)->m_fd , EPOLL_CTL_DEL, pnode->hSocket , nullptr );
4261
- if (r != 0 ) {
4262
- LogPrint (BCLog::NET, " %s -- epoll_ctl(%d, %d, %d, ...) failed. error: %s\n " , __func__,
4263
- m_edge_trig_events->m_fd , EPOLL_CTL_DEL, pnode->hSocket , NetworkErrorString (WSAGetLastError ()));
4264
- }
4265
- }
4266
- #endif
4267
- }
4268
-
4269
4208
void CaptureMessageToFile (const CAddress& addr,
4270
4209
const std::string& msg_type,
4271
4210
Span<const unsigned char > data,
0 commit comments