|
| 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_ = 0 |
| | 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:
TSocket is defined as NNet::TPollerDrivenSocket<TIOCp>.
TFileHandle is defined as NNet::TPollerDrivenFileHandle<TIOCp>.
Example usage:
IOCP-based poller for asynchronous I/O on Windows.
Definition iocp.hpp:35
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.