|
| 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.
|
|
void | Submit () |
| Submits queued I/O requests to the kernel.
|
|
std::tuple< int, int, int > | Kernel () const |
| For testing: retrieves kernel version.
|
|
const std::string & | KernelStr () const |
| For testing: retrieves a string describing kernel.
|
|
| 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.
|
|
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:
Example usage:
uringPoller.Register(socketFd);
uringPoller.Read(socketFd, buffer, bufferSize, coroutineHandle);
uringPoller.Submit();
int ret = uringPoller.Wait();
int result = uringPoller.Result();
TUring(int queueSize=256)
Constructs a TUring instance.
Additional methods for testing:
- Kernel() returns a tuple of kernel-provided statistics.
- KernelStr() returns a descriptive string with kernel statistics.