polling

Struct Event

Source
pub struct Event {
    pub key: usize,
    pub readable: bool,
    pub writable: bool,
    /* private fields */
}
Expand description

Indicates that a file descriptor or socket can read or write without blocking.

Fields§

§key: usize

Key identifying the file descriptor or socket.

§readable: bool

Can it do a read operation without blocking?

§writable: bool

Can it do a write operation without blocking?

Implementations§

Source§

impl Event

Source

pub const fn new(key: usize, readable: bool, writable: bool) -> Event

Create a new event.

Source

pub const fn all(key: usize) -> Event

All kinds of events (readable and writable).

Equivalent to: Event::new(key, true, true)

Source

pub const fn readable(key: usize) -> Event

Only the readable event.

Equivalent to: Event::new(key, true, false)

Source

pub const fn writable(key: usize) -> Event

Only the writable event.

Equivalent to: Event::new(key, false, true)

Source

pub const fn none(key: usize) -> Event

No events.

Equivalent to: Event::new(key, false, false)

Source

pub fn set_interrupt(&mut self, active: bool)

Add interruption events to this interest.

This usually indicates that the file descriptor or socket has been closed. It corresponds to the EPOLLHUP and POLLHUP events.

Interruption events are only supported on the following platforms:

  • epoll
  • poll
  • IOCP
  • Event Ports

On other platforms, this function is a no-op.

Source

pub fn with_interrupt(self) -> Self

Add interruption events to this interest.

This usually indicates that the file descriptor or socket has been closed. It corresponds to the EPOLLHUP and POLLHUP events.

Interruption events are only supported on the following platforms:

  • epoll
  • poll
  • IOCP
  • Event Ports

On other platforms, this function is a no-op.

Source

pub fn set_priority(&mut self, active: bool)

Add priority events to this interest.

This indicates that there is urgent data to read. It corresponds to the EPOLLPRI and POLLPRI events.

Priority events are only supported on the following platforms:

  • epoll
  • poll
  • IOCP
  • Event Ports

On other platforms, this function is a no-op.

Source

pub fn with_priority(self) -> Self

Add priority events to this interest.

This indicates that there is urgent data to read. It corresponds to the EPOLLPRI and POLLPRI events.

Priority events are only supported on the following platforms:

  • epoll
  • poll
  • IOCP
  • Event Ports

On other platforms, this function is a no-op.

Source

pub fn is_interrupt(&self) -> bool

Tell if this event is the result of an interrupt notification.

This usually indicates that the file descriptor or socket has been closed. It corresponds to the EPOLLHUP and POLLHUP events.

Interruption events are only supported on the following platforms:

  • epoll
  • poll
  • IOCP
  • Event Ports

On other platforms, this always returns false.

Source

pub fn is_priority(&self) -> bool

Tell if this event is the result of a priority notification.

This indicates that there is urgent data to read. It corresponds to the EPOLLPRI and POLLPRI events.

Priority events are only supported on the following platforms:

  • epoll
  • poll
  • IOCP
  • Event Ports

On other platforms, this always returns false.

Source

pub fn is_connect_failed(&self) -> Option<bool>

👎Deprecated since 3.4.0: use is_err in combination of is_hup instead, see documentation for is_err

Tells if this event is the result of a connection failure.

This function checks if a TCP connection has failed. It corresponds to the EPOLLERR or EPOLLHUP event in Linux and CONNECT_FAILED event in Windows IOCP.

§Examples
use std::{io, net};
// Assuming polling and socket2 are included as dependencies in Cargo.toml
use polling::Event;
use socket2::Type;

fn main() -> io::Result<()> {
    let socket = socket2::Socket::new(socket2::Domain::IPV4, Type::STREAM, None)?;
    let poller = polling::Poller::new()?;
    unsafe {
        poller.add(&socket, Event::new(0, true, true))?;
    }
    let addr = net::SocketAddr::new(net::Ipv4Addr::LOCALHOST.into(), 8080);
    socket.set_nonblocking(true)?;
    let _ = socket.connect(&addr.into());

    let mut events = polling::Events::new();

    events.clear();
    poller.wait(&mut events, None)?;

    let event = events.iter().next();

    let event = match event {
        Some(event) => event,
        None => {
            println!("no event");
            return Ok(());
        },
    };

    println!("event: {:?}", event);
    if event
        .is_connect_failed()
        .unwrap_or_default()
    {
        println!("connect failed");
    }

    Ok(())
}
§Returns

Returns Some(true) if the connection has failed, Some(false) if the connection has not failed, or None if the platform does not support detecting this condition.

Source

pub fn is_err(&self) -> Option<bool>

Tells if this event is the result of a connection failure.

This function checks if an error exist, particularly useful in detecting if TCP connection failed. It corresponds to the EPOLLERR event in Linux and CONNECT_FAILED event in Windows IOCP.

§Caveats

In epoll, a TCP connection failure is indicated by EPOLLERR + EPOLLHUP, though just EPOLLERR is enough to indicate a connection failure. EPOLLHUP may happen when we haven’t event called connect on the socket, but it is still a valid event to check for.

Returns Some(true) if the connection has failed, Some(false) if there is no error, or None if the platform does not support detecting this condition.

Source

pub fn clear_extra(&mut self)

Remove any extra information from this event.

Source

pub fn with_no_extra(self) -> Self

Get a version of this event with no extra information.

This is useful for comparing events with ==.

Trait Implementations§

Source§

impl Clone for Event

Source§

fn clone(&self) -> Event

Returns a copy of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Event

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl PartialEq for Event

Source§

fn eq(&self, other: &Event) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Copy for Event

Source§

impl Eq for Event

Source§

impl StructuralPartialEq for Event

Auto Trait Implementations§

§

impl Freeze for Event

§

impl RefUnwindSafe for Event

§

impl Send for Event

§

impl Sync for Event

§

impl Unpin for Event

§

impl UnwindSafe for Event

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dst: *mut T)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dst. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more