From 371cc94a1da483282e92b81ce3e603a4978674df Mon Sep 17 00:00:00 2001 From: pjh456 <147148383@qq.com> Date: Sun, 28 Sep 2025 09:05:42 +0000 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=90=AD=E5=BB=BA=E4=BA=86=E9=83=A8?= =?UTF-8?q?=E5=88=86=20epoll=5Floop=20=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/ouc_server/epoll/epoll_loop.cpp | 32 +++++++++++++++++++ include/ouc_server/epoll/epoll_loop.hpp | 41 +++++++++++++++++++++++++ 2 files changed, 73 insertions(+) create mode 100644 include/ouc_server/epoll/epoll_loop.cpp create mode 100644 include/ouc_server/epoll/epoll_loop.hpp diff --git a/include/ouc_server/epoll/epoll_loop.cpp b/include/ouc_server/epoll/epoll_loop.cpp new file mode 100644 index 0000000..eb48fc6 --- /dev/null +++ b/include/ouc_server/epoll/epoll_loop.cpp @@ -0,0 +1,32 @@ +#include + +#include +#include +#include +#include + +namespace ouc_server +{ + namespace epoll + { + + EpollLoop::EpollLoop() + { + epoll_fd = epoll_create1(0); + } + + EpollLoop::~EpollLoop() + { + close(epoll_fd); + } + + bool EpollLoop::add_fd(int fd, uint32_t event_flags, std::function callback) + { + struct epoll_event ev; + ev.events = event_flags; + ev.data.fd = fd; + epoll_ctl(epoll_fd, EPOLL_CTL_ADD, fd, &ev); + events_map[fd] = Event{fd, event_flags, callback}; + } + } +} \ No newline at end of file diff --git a/include/ouc_server/epoll/epoll_loop.hpp b/include/ouc_server/epoll/epoll_loop.hpp new file mode 100644 index 0000000..84ae087 --- /dev/null +++ b/include/ouc_server/epoll/epoll_loop.hpp @@ -0,0 +1,41 @@ +#ifndef INCLUDE_OUC_SERVER_EPOLL_LOOP +#define INCLUDE_OUC_SERVER_EPOLL_LOOP + +#include +#include +#include +#include +#include +#include +#include +#include + +namespace ouc_server +{ + namespace epoll + { + struct Event + { + int fd; + uint32_t events; + std::function callback; + }; + + class EpollLoop + { + private: + int epoll_fd; + std::unordered_map events_map; + + public: + EpollLoop(); + + ~EpollLoop(); + + public: + bool add_fd(int, uint32_t, std::function); + }; + } +} + +#endif // INCLUDE_OUC_SERVER_EPOLL_LOOP \ No newline at end of file