2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
20#include "core/multiplexer/epoll/DescriptorEventPublisher.h"
22#include "core/DescriptorEventReceiver.h"
24#ifndef DOXYGEN_SHOULD_SKIP_THIS
26#include "utils/PreserveErrno.h"
32namespace core::multiplexer::
epoll {
38 ePollEvents.resize(1);
44 epoll_event ePollEvent{};
46 ePollEvent.data.ptr = eventReceiver;
47 ePollEvent.events =
events;
52 if (interestCount >= ePollEvents.size()) {
53 ePollEvents.resize(ePollEvents.size() * 2);
55 }
else if (errno == EEXIST) {
66 if (ePollEvents.size() > (interestCount * 2) + 1) {
67 ePollEvents.resize(ePollEvents.size() / 2);
68 ePollEvents.shrink_to_fit();
76 epoll_event ePollEvent{events, {eventReceiver}};
94 return ePollEvents.data();
98 return static_cast<
int>(interestCount);
108 ePollEvents.muxAdd(eventReceiver);
112 ePollEvents.muxDel(fd);
116 ePollEvents.muxOn(eventReceiver);
120 ePollEvents.muxOff(eventReceiver);
124 const int count = core::system::epoll_wait(ePollEvents.getEPFd(), ePollEvents.getEvents(), ePollEvents.getInterestCount(), 0);
126 for (
int i = 0; i < count; i++) {
127 const epoll_event& ev = ePollEvents.getEvents()[i];
129 if (eventReceiver !=
nullptr && (ev.events &
revents) != 0) {
unsigned long eventCounter
int getRegisteredFd() const
int getInterestCount() const
EPollEvents(int &epfd, uint32_t event)
void muxOn(core::DescriptorEventReceiver *eventReceiver)
void muxAdd(core::DescriptorEventReceiver *eventReceiver)
epoll_event * getEvents()
void muxMod(int fd, uint32_t events, core::DescriptorEventReceiver *eventReceiver) const
void muxOff(core::DescriptorEventReceiver *eventReceiver)
void muxAdd(core::DescriptorEventReceiver *eventReceiver) override
DescriptorEventPublisher(const std::string &name, int &epfd, uint32_t events, uint32_t revents)
void muxOff(core::DescriptorEventReceiver *eventReceiver) override
void muxDel(int fd) override
void spanActiveEvents() override
void muxOn(core::DescriptorEventReceiver *eventReceiver) override
int epoll_create1(int flags)
int epoll_ctl(int epfd, int op, int fd, epoll_event *event)