Linux-specific poller implementation using epoll. More...
#include <epoll.hpp>
Public Types | |
using | TSocket = NNet::TSocket |
Alias for the socket type. | |
using | TFileHandle = NNet::TFileHandle |
Alias for the file handle type. | |
Public Member Functions | |
TEPoll () | |
Constructs the TEPoll instance. | |
~TEPoll () | |
Destructs the TEPoll instance and cleans up resources. | |
void | Poll () |
Polls for I/O events using the epoll API. | |
![]() | |
TPollerBase ()=default | |
Default constructor. | |
TPollerBase (const TPollerBase &)=delete | |
Copying is disabled. | |
TPollerBase & | operator= (const TPollerBase &)=delete |
unsigned | AddTimer (TTime deadline, THandle h) |
Schedules a timer. | |
bool | RemoveTimer (unsigned timerId, TTime deadline) |
Removes or cancels a timer. | |
void | AddRead (int fd, THandle h) |
Registers a read event on a file descriptor. | |
void | AddWrite (int fd, THandle h) |
Registers a write event on a file descriptor. | |
void | AddRemoteHup (int fd, THandle h) |
Registers a remote hang-up (RHUP) event. | |
void | RemoveEvent (int fd) |
Removes registered events for a specific file descriptor. | |
void | RemoveEvent (THandle) |
Removes events associated with a given coroutine handle. | |
auto | Sleep (TTime until) |
Suspends execution until the specified time. | |
template<typename Rep, typename Period> | |
auto | Sleep (std::chrono::duration< Rep, Period > duration) |
Overload of Sleep() accepting a duration. | |
auto | Yield () |
Yields execution to the next event loop iteration. | |
void | Wakeup (TEvent &&change) |
Wakes up a coroutine waiting on an event. | |
void | WakeupReadyHandles () |
Wakes up all coroutines waiting on ready events. | |
void | SetMaxDuration (std::chrono::milliseconds maxDuration) |
Sets the maximum polling duration. | |
auto | TimersSize () const |
Returns the number of scheduled timers. | |
Additional Inherited Members | |
![]() | |
timespec | GetTimeout () const |
Computes the poll timeout based on scheduled timers. | |
void | Reset () |
Clears the lists of ready events and pending changes. | |
void | ProcessTimers () |
Processes scheduled timers. | |
![]() | |
static constexpr timespec | GetMaxDuration (std::chrono::milliseconds duration) |
Computes a timespec from a duration. | |
![]() | |
int | MaxFd_ = -1 |
Highest file descriptor in use. | |
std::vector< TEvent > | Changes_ |
Pending changes (registered events). | |
std::vector< TEvent > | ReadyEvents_ |
Events ready to wake up their coroutines. | |
unsigned | TimerId_ = 0 |
Counter for generating unique timer IDs. | |
std::priority_queue< TTimer > | Timers_ |
Priority queue for scheduled timers. | |
TTime | LastTimersProcessTime_ |
Last time timers were processed. | |
unsigned | LastFiredTimer_ = (unsigned)(-1) |
ID of the last fired timer. | |
std::chrono::milliseconds | MaxDuration_ = std::chrono::milliseconds(100) |
Maximum poll duration. | |
timespec | MaxDurationTs_ = GetMaxDuration(MaxDuration_) |
Max duration represented as timespec. | |
Linux-specific poller implementation using epoll.
TEPoll inherits from TPollerBase and provides an implementation of asynchronous I/O event polling based on the Linux epoll API. It is used only on Linux systems.
The class defines the following type aliases for ease of use:
TSocket
is defined as NNet::TSocket.TFileHandle
is defined as NNet::TFileHandle.Main methods:
Internal data members include:
Fd_
).InEvents_
) holding all registered events.OutEvents_
) to store the events returned by epoll_wait.void NNet::TEPoll::Poll | ( | ) |
Polls for I/O events using the epoll API.
This method calls epoll_wait to detect ready events, processes the returned events, and updates the internal event structures.