|
| | TUring (int queueSize=256) |
| | Constructs a TUring instance.
|
| |
|
| ~TUring () |
| | Destructor cleans up the io_uring and related resources.
|
| |
| 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 pending operations on the specified file descriptor.
|
| |
| void | Cancel (std::coroutine_handle<> h) |
| | Cancels pending operations associated with a specific coroutine handle.
|
| |
| void | Register (int fd) |
| | Registers a file descriptor with the IO_uring poller.
|
| |
| int | Wait (timespec ts={10, 0}) |
| | Waits for I/O completions.
|
| |
| void | Poll () |
| | Polls for I/O completions.
|
| |
| int | Result () |
| | Retrieves the result of the last completed I/O completion.
|
| |
|
| 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.
|
| |
Poller implementation based on io_uring.
TUring inherits from TPollerBase and implements asynchronous I/O operations using the Linux io_uring API. It provides methods for performing asynchronous read, write, receive, send, accept, and connect operations.
Key features:
- Uses io_uring to queue and submit asynchronous I/O operations.
- Provides operations such as Read(), Write(), Recv(), Send(), Accept() and Connect().
- Offers additional methods for cancelling pending operations, registering file descriptors, waiting for completions, and submitting queued requests.
Type aliases:
TSocket is defined as NNet::TPollerDrivenSocket<TUring>.
TFileHandle is defined as NNet::TPollerDrivenFileHandle<TUring>.
Example usage:
uringPoller.Register(socketFd);
uringPoller.Read(socketFd, buffer, bufferSize, coroutineHandle);
int ret = uringPoller.Wait();
int result = uringPoller.Result();
Poller implementation based on io_uring.
Definition uring.hpp:60