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
impl Poll
pub(crate) fn new() -> Result<Poll>
fn new_inner(force_fallback_lt: bool) -> Result<Poll>
pub(crate) fn poll(&self, timeout: Option<Duration>) -> Result<Vec<PollEvent>>
sourcepub unsafe fn register(
&self,
fd: impl AsFd,
interest: Interest,
mode: Mode,
token: Token,
) -> Result<()>
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.
sourcepub fn reregister(
&self,
fd: impl AsFd,
interest: Interest,
mode: Mode,
token: Token,
) -> Result<()>
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.
sourcepub fn unregister(&self, fd: impl AsFd) -> Result<()>
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.