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.
§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 & polling: it will do nothing but return
Ok(())
.
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 safe to cancel before polling. If the submitted operation contains a cancelled user-defined data, the operation will be ignored. However, to make the operation dropped correctly, you should cancel after push.
sourcepub fn push<T: OpCode + 'static>(
&mut self,
op: T
) -> PushEntry<Key<T>, BufResult<usize, T>>
pub fn push<T: OpCode + 'static>( &mut self, op: T ) -> PushEntry<Key<T>, 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<usize>
) -> Result<()>
pub fn poll( &mut self, timeout: Option<Duration>, entries: &mut impl Extend<usize> ) -> Result<()>
Poll the driver and get completed entries.
You need to call Proactor::pop
to get the pushed operations.
sourcepub fn pop<T: OpCode>(&mut self, user_data: Key<T>) -> BufResult<usize, T>
pub fn pop<T: OpCode>(&mut self, user_data: Key<T>) -> BufResult<usize, T>
Get the pushed operations from the completion entries.
§Panics
This function will panic if the requested operation has not been completed.
sourcepub fn has_result(&self, user_data: usize) -> bool
pub fn has_result(&self, user_data: usize) -> bool
Query if the operation has completed.
sourcepub fn handle(&self) -> Result<NotifyHandle>
pub fn handle(&self) -> Result<NotifyHandle>
Create a notify handle to interrupt the inner driver.