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

Poller implementation based on the poll() system call. More...

#include <poll.hpp>

Inheritance diagram for NNet::TPoll:
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

void Poll ()
 Polls for I/O events.
 
- 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

Poller implementation based on the poll() system call.

TPoll inherits from TPollerBase and implements asynchronous I/O event polling using the poll() system call. It manages events via a vector of pollfd structures and an internal list of event registrations (stored as tuples pairing THandlePair with an index).

Platform-specific notes:

  • On Windows, a dummy socket (DummySocket_) is maintained to properly handle timeouts.

This class provides type aliases for the socket and file handle types:

The main method is:

  • Poll(), which performs the actual polling and processes incoming events.
See also
TPollerBase, TSelect.

Member Function Documentation

◆ Poll()

void NNet::TPoll::Poll ( )

Polls for I/O events.

This method uses the poll() system call to wait for registered events on file descriptors. It processes incoming events by matching them against the internal list of changes and then waking up any suspended coroutines waiting on those events.


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