slings 0.3.47

A small async runtime based on io-uring for Rust
Documentation
use std::collections::VecDeque;
use std::io;
use std::os::unix::io::RawFd;

use io_uring::{opcode, types};

use crate::driver::{Completable, CqeResult, Op};

pub(crate) struct AcceptMulti {
    results: VecDeque<CqeResult>,
}

impl AcceptMulti {
    pub fn next(&mut self) -> Option<CqeResult> {
        self.results.pop_front()
    }
}

impl Op<AcceptMulti> {
    pub(crate) fn accept_multi(fd: RawFd) -> io::Result<Op<AcceptMulti>> {
        let entry = opcode::AcceptMulti::new(types::Fd(fd))
            .flags(libc::SOCK_CLOEXEC)
            .build();
        Op::submit(
            AcceptMulti {
                results: VecDeque::new(),
            },
            entry,
        )
    }
}

impl Completable for AcceptMulti {
    type Output = CqeResult;

    fn complete(self, cqe: CqeResult) -> Self::Output {
        cqe
    }

    fn update(&mut self, cqe: CqeResult) {
        self.results.push_back(cqe);
    }
}