@@ -59,17 +59,17 @@ EdgeTriggeredEvents::~EdgeTriggeredEvents()
5959 }
6060}
6161
62- bool EdgeTriggeredEvents::AddSocket (SOCKET socket ) const
62+ bool EdgeTriggeredEvents::RegisterEntity ( int entity, std::string entity_name ) const
6363{
6464 assert (m_valid);
6565
6666 if (m_mode == SocketEventsMode::EPoll) {
6767#ifdef USE_EPOLL
6868 epoll_event event;
69- event.data .fd = socket ;
69+ event.data .fd = entity ;
7070 event.events = EPOLLIN;
71- if (epoll_ctl (m_fd, EPOLL_CTL_ADD, socket , &event) != 0 ) {
72- LogPrintf (" Failed to add socket to epoll fd (epoll_ctl returned error %s)\n " ,
71+ if (epoll_ctl (m_fd, EPOLL_CTL_ADD, entity , &event) != 0 ) {
72+ LogPrintf (" Failed to add %s to epoll fd (epoll_ctl returned error %s)\n " , entity_name ,
7373 NetworkErrorString (WSAGetLastError ()));
7474 return false ;
7575 }
@@ -79,9 +79,9 @@ bool EdgeTriggeredEvents::AddSocket(SOCKET socket) const
7979 } else if (m_mode == SocketEventsMode::KQueue) {
8080#ifdef USE_KQUEUE
8181 struct kevent event;
82- EV_SET (&event, socket , EVFILT_READ, EV_ADD, 0 , 0 , nullptr );
82+ EV_SET (&event, entity , EVFILT_READ, EV_ADD, 0 , 0 , nullptr );
8383 if (kevent (m_fd, &event, 1 , nullptr , 0 , nullptr ) != 0 ) {
84- LogPrintf (" Failed to add socket to kqueue fd (kevent returned error %s)\n " ,
84+ LogPrintf (" Failed to add %s to kqueue fd (kevent returned error %s)\n " , entity_name ,
8585 NetworkErrorString (WSAGetLastError ()));
8686 return false ;
8787 }
@@ -94,14 +94,14 @@ bool EdgeTriggeredEvents::AddSocket(SOCKET socket) const
9494 return true ;
9595}
9696
97- bool EdgeTriggeredEvents::RemoveSocket (SOCKET socket ) const
97+ bool EdgeTriggeredEvents::UnregisterEntity ( int entity, std::string entity_name ) const
9898{
9999 assert (m_valid);
100100
101101 if (m_mode == SocketEventsMode::EPoll) {
102102#ifdef USE_EPOLL
103- if (epoll_ctl (m_fd, EPOLL_CTL_DEL, socket , nullptr ) != 0 ) {
104- LogPrintf (" Failed to remove socket from epoll fd (epoll_ctl returned error %s)\n " ,
103+ if (epoll_ctl (m_fd, EPOLL_CTL_DEL, entity , nullptr ) != 0 ) {
104+ LogPrintf (" Failed to remove %s from epoll fd (epoll_ctl returned error %s)\n " , entity_name ,
105105 NetworkErrorString (WSAGetLastError ()));
106106 return false ;
107107 }
@@ -111,9 +111,9 @@ bool EdgeTriggeredEvents::RemoveSocket(SOCKET socket) const
111111 } else if (m_mode == SocketEventsMode::KQueue) {
112112#ifdef USE_KQUEUE
113113 struct kevent event;
114- EV_SET (&event, socket , EVFILT_READ, EV_DELETE, 0 , 0 , nullptr );
114+ EV_SET (&event, entity , EVFILT_READ, EV_DELETE, 0 , 0 , nullptr );
115115 if (kevent (m_fd, &event, 1 , nullptr , 0 , nullptr ) != 0 ) {
116- LogPrintf (" Failed to remove socket from kqueue fd (kevent returned error %s)\n " ,
116+ LogPrintf (" Failed to remove %s from kqueue fd (kevent returned error %s)\n " , entity_name ,
117117 NetworkErrorString (WSAGetLastError ()));
118118 return false ;
119119 }
@@ -126,6 +126,38 @@ bool EdgeTriggeredEvents::RemoveSocket(SOCKET socket) const
126126 return true ;
127127}
128128
129+ bool EdgeTriggeredEvents::AddSocket (SOCKET socket) const
130+ {
131+ return RegisterEntity (socket, " socket" );
132+ }
133+
134+ bool EdgeTriggeredEvents::RemoveSocket (SOCKET socket) const
135+ {
136+ return UnregisterEntity (socket, " socket" );
137+ }
138+
139+ bool EdgeTriggeredEvents::RegisterPipe (int wakeup_pipe)
140+ {
141+ if (m_pipe_registered) {
142+ LogPrintf (" Pipe already registered, ignoring new registration request\n " );
143+ return false ;
144+ }
145+ bool ret = RegisterEntity (wakeup_pipe, " wakeup pipe" );
146+ if (ret) m_pipe_registered = true ;
147+ return ret;
148+ }
149+
150+ bool EdgeTriggeredEvents::UnregisterPipe (int wakeup_pipe)
151+ {
152+ if (!m_pipe_registered) {
153+ LogPrintf (" No pipe currently registered to unregister, ignoring request\n " );
154+ return false ;
155+ }
156+ bool ret = UnregisterEntity (wakeup_pipe, " wakeup pipe" );
157+ if (ret) m_pipe_registered = false ;
158+ return ret;
159+ }
160+
129161bool EdgeTriggeredEvents::RegisterEvents (SOCKET socket) const
130162{
131163 assert (m_valid && socket != INVALID_SOCKET);
0 commit comments