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

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

#include <select.hpp>

Inheritance diagram for NNet::TSelect:
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 using the select() system call.
 
- 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 select() system call.

TSelect inherits from TPollerBase and implements asynchronous I/O polling using the select() system call. It manages file descriptors using fd_set structures (or equivalent containers on non‑Windows systems) and provides helper functions for obtaining pointers to the read and write fd_sets.

On Windows, a dummy socket is maintained to handle timeouts correctly.

The class also defines convenient type aliases:

Main method:

  • Poll() is called to perform the select() operation and process events.
See also
TPollerBase, NNet::TSocket, NNet::TFileHandle.

Member Function Documentation

◆ Poll()

void NNet::TSelect::Poll ( )

Polls for I/O events using the select() system call.

This method builds the file descriptor sets from the pending events, calls select(), and then processes any triggered events.


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