41 EventMultiplexer::EventMultiplexer()
42 : core::EventMultiplexer(
new core::multiplexer::epoll::DescriptorEventPublisher(
"READ",
43 epfds[core::EventMultiplexer::DISP_TYPE::RD],
45 EPOLLIN | EPOLLHUP | EPOLLRDHUP | EPOLLERR),
46 new core::multiplexer::epoll::DescriptorEventPublisher(
"WRITE",
47 epfds[core::EventMultiplexer::DISP_TYPE::WR],
50 new core::multiplexer::epoll::DescriptorEventPublisher(
"EXCEPT",
51 epfds[core::EventMultiplexer::DISP_TYPE::EX],
54 , epfd(core::system::epoll_create1(EPOLL_CLOEXEC)) {
56 event.events = EPOLLIN;
58 event.data.ptr = descriptorEventPublishers[core::EventMultiplexer::DISP_TYPE::RD];
59 core::system::epoll_ctl(epfd, EPOLL_CTL_ADD, epfds[core::EventMultiplexer::DISP_TYPE::RD], &event);
61 event.data.ptr = descriptorEventPublishers[core::EventMultiplexer::DISP_TYPE::WR];
62 core::system::epoll_ctl(epfd, EPOLL_CTL_ADD, epfds[core::EventMultiplexer::DISP_TYPE::WR], &event);
64 event.data.ptr = descriptorEventPublishers[core::EventMultiplexer::DISP_TYPE::EX];
65 core::system::epoll_ctl(epfd, EPOLL_CTL_ADD, epfds[core::EventMultiplexer::DISP_TYPE::EX], &event);
67 LOG(DEBUG) <<
"Core::multiplexer: epoll";
70 int EventMultiplexer::monitorDescriptors(utils::Timeval& tickTimeout,
const sigset_t& sigMask) {
71 return core::system::epoll_pwait(epfd, ePollEvents, 3, tickTimeout.getMs(), &sigMask);