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<T: OpCode>(&mut self, op: Key<T>) -> Option<BufResult<usize, T>>
pub fn cancel<T: OpCode>(&mut self, op: Key<T>) -> Option<BufResult<usize, T>>
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
.
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>) -> Result<()>
pub fn poll(&mut self, timeout: Option<Duration>) -> Result<()>
Poll the driver and get completed entries.
You need to call Proactor::pop
to get the pushed
operations.
Sourcepub fn pop<T>(
&mut self,
op: Key<T>,
) -> PushEntry<Key<T>, (BufResult<usize, T>, u32)>
pub fn pop<T>( &mut self, op: Key<T>, ) -> PushEntry<Key<T>, (BufResult<usize, T>, u32)>
Get the pushed operations from the completion entries.
§Panics
This function will panic if the requested operation has not been completed.
Sourcepub fn update_waker<T>(&mut self, op: &mut Key<T>, waker: Waker)
pub fn update_waker<T>(&mut self, op: &mut Key<T>, waker: Waker)
Update the waker of the specified op.
Sourcepub fn handle(&self) -> Result<NotifyHandle>
pub fn handle(&self) -> Result<NotifyHandle>
Create a notify handle to interrupt the inner driver.