|
void | Read (int fd, void *buf, int size, std::coroutine_handle<> handle) |
| Posts an asynchronous read operation.
|
|
void | Write (int fd, const void *buf, int size, std::coroutine_handle<> handle) |
| Posts an asynchronous write operation.
|
|
void | Recv (int fd, void *buf, int size, std::coroutine_handle<> handle) |
| Posts an asynchronous receive operation.
|
|
void | Send (int fd, const void *buf, int size, std::coroutine_handle<> handle) |
| Posts an asynchronous send operation.
|
|
void | Accept (int fd, struct sockaddr *addr, socklen_t *len, std::coroutine_handle<> handle) |
| Posts an asynchronous accept operation.
|
|
void | Connect (int fd, const sockaddr *addr, socklen_t len, std::coroutine_handle<> handle) |
| Posts an asynchronous connect operation.
|
|
void | Cancel (int fd) |
| Cancels all pending operations on the specified file descriptor.
|
|
void | Register (int fd) |
| Registers a file descriptor with the IOCP.
|
|
int | Result () |
| Retrieves the result of the last completed IOCP operation.
|
|
void | Poll () |
| Polls for IOCP events.
|
|
| 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.
|
|
|
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.
|
|
IOCP-based poller for asynchronous I/O on Windows.
TIOCp inherits from TPollerBase and implements an asynchronous poller using the Windows I/O Completion Ports (IOCP) API. It provides methods for posting asynchronous read, write, accept, connect, and cancellation operations. To optimize performance, TIOCp uses a custom arena allocator (TArenaAllocator) to preallocate IOCP event structures, avoiding per-operation dynamic memory allocations required by the API.
Type aliases provided:
Example usage:
TIOCp iocpPoller;
void Register(int fd)
Registers a file descriptor with the IOCP.
void Poll()
Polls for IOCP events.
- Note
- This class is specific to Windows and uses IOCP for high-performance I/O.