Struct calloop::sys::Poll

source ·
pub struct Poll {
    pub(crate) poller: Arc<Poller>,
    events: RefCell<Events>,
    level_triggered: Option<RefCell<HashMap<usize, (RawFd, Event)>>>,
    pub(crate) timers: Rc<RefCell<TimerWheel>>,
}
Expand description

The polling system

This type represents the polling system of calloop, on which you can register your file descriptors. This interface is only accessible in implementations of the EventSource trait.

You only need to interact with this type if you are implementing your own event sources, while implementing the EventSource trait. And even in this case, you can often just use the Generic event source and delegate the implementations to it.

Fields§

§poller: Arc<Poller>

The handle to wepoll/epoll/kqueue/… used to poll for events.

§events: RefCell<Events>

The buffer of events returned by the poller.

§level_triggered: Option<RefCell<HashMap<usize, (RawFd, Event)>>>

The sources registered as level triggered.

Some platforms that polling supports do not support level-triggered events. As of the time of writing, this only includes Solaris and illumos. To work around this, we emulate level triggered events by keeping this map of file descriptors.

One can emulate level triggered events on top of oneshot events by just re-registering the file descriptor every time it is polled. However, this is not ideal, as it requires a system call every time. It’s better to use the intergrated system, if available.

§timers: Rc<RefCell<TimerWheel>>

Implementations§

source§

impl Poll

source

pub(crate) fn new() -> Result<Poll>

source

fn new_inner(force_fallback_lt: bool) -> Result<Poll>

source

pub(crate) fn poll(&self, timeout: Option<Duration>) -> Result<Vec<PollEvent>>

source

pub unsafe fn register( &self, fd: impl AsFd, interest: Interest, mode: Mode, token: Token, ) -> Result<()>

Register a new file descriptor for polling

The file descriptor will be registered with given interest, mode and token. This function will fail if given a bad file descriptor or if the provided file descriptor is already registered.

§Safety

The registered source must not be dropped before it is unregistered.

§Leaking tokens

If your event source is dropped without being unregistered, the token passed in here will remain on the heap and continue to be used by the polling system even though no event source will match it.

source

pub fn reregister( &self, fd: impl AsFd, interest: Interest, mode: Mode, token: Token, ) -> Result<()>

Update the registration for a file descriptor

This allows you to change the interest, mode or token of a file descriptor. Fails if the provided fd is not currently registered.

See note on register() regarding leaking.

source

pub fn unregister(&self, fd: impl AsFd) -> Result<()>

Unregister a file descriptor

This file descriptor will no longer generate events. Fails if the provided file descriptor is not currently registered.

source

pub(crate) fn notifier(&self) -> Notifier

Get a thread-safe handle which can be used to wake up the Poll.

source

pub(crate) fn poller(&self) -> &Arc<Poller>

Get a reference to the poller.

Trait Implementations§

source§

impl Debug for Poll

source§

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

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl !Freeze for Poll

§

impl !RefUnwindSafe for Poll

§

impl !Send for Poll

§

impl !Sync for Poll

§

impl Unpin for Poll

§

impl !UnwindSafe for Poll

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> 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, U> TryFrom<U> for T
where U: Into<T>,

§

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>,

§

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