@@ -563,7 +563,9 @@ void CNode::CloseSocketDisconnect(CConnman* connman)
563563 }
564564 }
565565
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+ }
567569
568570 LogPrint (BCLog::NET, " disconnecting peer=%d\n " , id);
569571 CloseSocket (hSocket);
@@ -1276,7 +1278,12 @@ void CConnman::CreateNodeFromAcceptedSocket(SOCKET hSocket,
12761278 LOCK (m_nodes_mutex);
12771279 m_nodes.push_back (pnode);
12781280 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+ }
12801287 WakeSelect ();
12811288 }
12821289
@@ -2980,7 +2987,12 @@ void CConnman::OpenNetworkConnection(const CAddress& addrConnect, bool fCountFai
29802987 {
29812988 LOCK (m_nodes_mutex);
29822989 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+ }
29842996 WakeSelect ();
29852997 }
29862998}
@@ -4193,79 +4205,6 @@ uint64_t CConnman::CalculateKeyedNetGroup(const CAddress& ad) const
41934205 return GetDeterministicRandomizer (RANDOMIZER_ID_NETGROUP).Write (vchNetGroup.data (), vchNetGroup.size ()).Finalize ();
41944206}
41954207
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-
42694208void CaptureMessageToFile (const CAddress& addr,
42704209 const std::string& msg_type,
42714210 Span<const unsigned char > data,
0 commit comments