6 #include <sys/select.h>
10 #include <unordered_map>
21 using std::unordered_map;
27 KernelEventMechanism::KernelEventMechanism() : initialized(false), _psd(nullptr) {
39 KernelEventMechanism::~KernelEventMechanism() {
67 auto haveInterest =
false;
81 if (haveInterest ==
true) {
87 psd->fdsMutex.unlock();
108 psd->fdsMutex.unlock();
135 struct timeval timeout = {0, 1L * 1000L};
139 fd_set rfds = psd->rfds;
140 fd_set wfds = psd->wfds;
141 psd->fdsMutex.unlock();
144 auto result = select(psd->maxFd + 1, &rfds, &wfds, NULL, &timeout);
150 psd->fdsMutex.lock();
152 for (
const auto& [fd, cookie]: psd->fds) {
153 if (FD_ISSET(fd, &rfds) != 0) {
154 psd->events.emplace_back(
160 if (FD_ISSET(fd, &wfds) != 0) {
161 psd->events.emplace_back(
168 psd->fdsMutex.unlock();
171 return psd->events.size();
182 const auto&
event = psd->
events[index];
183 interest =
event.interest;
184 cookie =
event.cookie;
Interface to kernel event mechanismns.
void shutdownKernelEventMechanism()
Shutdowns the kernel event mechanism.
void removeSocket(NetworkSocket *socket)
Removes a socket.
void setSocketInterest(NetworkSocket *socket, const NIOInterest lastInterest, const NIOInterest interest, const void *cookie)
Sets a non blocked socket io interest.
int doKernelEventMechanism()
Do the kernel event mechanism.
void initKernelEventMechanism(const unsigned int maxSockets)
Initializes the kernel event mechanism.
void decodeKernelEvent(const unsigned int index, NIOInterest &interest, void *&cookie)
Decodes a kernel event.
Kernel event mechanism exception class.
Base class of network sockets.
void lock()
Locks the mutex, additionally mutex locks will block until other locks have been unlocked.
const NIOInterest NIO_INTEREST_READ
uint8_t NIOInterest
type definition for network IO interest
const NIOInterest NIO_INTEREST_WRITE