Struct compio_driver::Proactor
source · pub struct Proactor { /* private fields */ }
Expand description
Low-level actions of completion-based IO. It owns the operations to keep the driver safe.
Implementations§
source§impl Proactor
impl Proactor
sourcepub fn builder() -> ProactorBuilder
pub fn builder() -> ProactorBuilder
Create ProactorBuilder
to config the proactor.
sourcepub fn attach(&mut self, fd: RawFd) -> Result<()>
pub fn attach(&mut self, fd: RawFd) -> Result<()>
Attach an fd to the driver. It will cause unexpected result to attach the handle with one driver and push an op to another driver.
Platform specific
- IOCP: it will be attached to the completion port. An fd could only be
attached to one driver, and could only be attached once, even if you
try_clone
it. - io-uring: it will do nothing and return
Ok(())
. - polling: it will initialize inner queue and register to the driver. On Linux and Android, if the fd is a normal file or a directory, this method will do nothing. For other fd and systems, you should only call this method once for a specific resource. If this method is called twice with the same fd, we assume that the old fd has been closed, and it’s a new fd.
sourcepub fn cancel(&mut self, user_data: usize)
pub fn cancel(&mut self, user_data: usize)
Cancel an operation with the pushed user-defined data.
The cancellation is not reliable. The underlying operation may continue,
but just don’t return from Proactor::poll
. Therefore, although an
operation is cancelled, you should not reuse its user_data
.
It is well-defined to cancel before polling. If the submitted operation contains a cancelled user-defined data, the operation will be ignored.
sourcepub fn push<T: OpCode + 'static>(
&mut self,
op: T
) -> PushEntry<usize, BufResult<usize, T>>
pub fn push<T: OpCode + 'static>( &mut self, op: T ) -> PushEntry<usize, BufResult<usize, T>>
Push an operation into the driver, and return the unique key, called user-defined data, associated with it.
sourcepub fn poll(
&mut self,
timeout: Option<Duration>,
entries: &mut impl Extend<Entry>
) -> Result<()>
pub fn poll( &mut self, timeout: Option<Duration>, entries: &mut impl Extend<Entry> ) -> Result<()>
Poll the driver and get completed entries.
You need to call Proactor::pop
to get the pushed operations.
sourcepub fn pop<'a>(
&'a mut self,
entries: &'a mut impl Iterator<Item = Entry>
) -> impl Iterator<Item = BufResult<usize, Operation>> + 'a
pub fn pop<'a>( &'a mut self, entries: &'a mut impl Iterator<Item = Entry> ) -> impl Iterator<Item = BufResult<usize, Operation>> + 'a
Get the pushed operations from the completion entries.
sourcepub fn handle(&self) -> Result<NotifyHandle>
pub fn handle(&self) -> Result<NotifyHandle>
Create a notify handle to interrupt the inner driver.