7 #include <liburing/io_uring.h>    22   void PrepPollAdd(
int fd, 
short mask) {
    23     PrepFd(IORING_OP_POLL_ADD, fd);
    24     sqe_->poll_events = mask;
    27   void PrepRecvMsg(
int fd, 
struct msghdr* msg, 
unsigned flags) {
    28     PrepFd(IORING_OP_RECVMSG, fd);
    29     sqe_->addr = (
unsigned long)msg;
    31     sqe_->msg_flags = flags;
    34   void PrepRead(
int fd, 
void* buf, 
unsigned size, 
size_t offset) {
    35     PrepFd(IORING_OP_READ, fd);
    36     sqe_->addr = (
unsigned long)buf;
    41   void PrepSendMsg(
int fd, 
const struct msghdr* msg, 
unsigned flags) {
    42     PrepFd(IORING_OP_SENDMSG, fd);
    43     sqe_->addr = (
unsigned long)msg;
    45     sqe_->msg_flags = flags;
    48   void PrepConnect(
int fd, 
const struct sockaddr* addr, socklen_t addrlen) {
    49     PrepFd(IORING_OP_CONNECT, fd);
    50     sqe_->addr = (
unsigned long)addr;
    55   void PrepTimeout(
const timespec* ts, 
bool is_abs = 
true) {
    56     PrepFd(IORING_OP_TIMEOUT, -1);
    57     sqe_->addr = (
unsigned long)ts;
    59     sqe_->timeout_flags = IORING_TIMEOUT_ABS;
    68     PrepFd(IORING_OP_NOP, -1);
    72   explicit SubmitEntry(io_uring_sqe* sqe) : sqe_(sqe) {
    75   void PrepFd(
int op, 
int fd) {
    84     sqe_->__pad2[0] = sqe_->__pad2[1] = sqe_->__pad2[2] = 0;