COROIO: NNet::TEPoll Class Reference
COROIO
 
Loading...
Searching...
No Matches
NNet::TEPoll Class Reference

Linux-specific poller implementation using epoll. More...

#include <epoll.hpp>

Inheritance diagram for NNet::TEPoll:
NNet::TPollerBase

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.
 
- Public Member Functions inherited from NNet::TPollerBase
 TPollerBase ()=default
 Default constructor.
 
 TPollerBase (const TPollerBase &)=delete
 Copying is disabled.
 
TPollerBaseoperator= (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

- Protected Member Functions inherited from NNet::TPollerBase
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 Protected Member Functions inherited from NNet::TPollerBase
static constexpr timespec GetMaxDuration (std::chrono::milliseconds duration)
 Computes a timespec from a duration.
 
- Protected Attributes inherited from NNet::TPollerBase
int MaxFd_ = -1
 Highest file descriptor in use.
 
std::vector< TEventChanges_
 Pending changes (registered events).
 
std::vector< TEventReadyEvents_
 Events ready to wake up their coroutines.
 
unsigned TimerId_ = 0
 Counter for generating unique timer IDs.
 
std::priority_queue< TTimerTimers_
 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.
 

Detailed Description

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:

Main methods:

  • TEPoll() and ~TEPoll() for construction and cleanup.
  • Poll() which polls for I/O events and processes them.

Internal data members include:

  • The epoll file descriptor (Fd_).
  • An internal container (InEvents_) holding all registered events.
  • A vector (OutEvents_) to store the events returned by epoll_wait.
Note
This class is only supported on Linux.

Member Function Documentation

◆ Poll()

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.


The documentation for this class was generated from the following file: