[−][src]Crate polling
Portable interface to epoll, kqueue, event ports, and wepoll.
Supported platforms:
- epoll: Linux, Android
- kqueue: macOS, iOS, FreeBSD, NetBSD, OpenBSD, DragonFly BSD
- event ports: illumos, Solaris
- wepoll: Windows
Polling is done in oneshot mode, which means interest in I/O events needs to be reset after an event is delivered if we're interested in the next event of the same kind.
Only one thread can be waiting for I/O events at a time.
Examples
use polling::{Event, Poller}; use std::net::TcpListener; // Create a TCP listener. let socket = TcpListener::bind("127.0.0.1:8000")?; let key = 7; // arbitrary key identifying the socket // Create a poller and register interest in readability on the socket. let poller = Poller::new()?; poller.insert(&socket)?; poller.interest(&socket, Event::readable(key))?; // The event loop. let mut events = Vec::new(); loop { // Wait for at least one I/O event. events.clear(); poller.wait(&mut events, None)?; for ev in &events { if ev.key == key { // Perform a non-blocking accept operation. socket.accept()?; // Set interest in the next readability event. poller.interest(&socket, Event::readable(key))?; } } }
Structs
Event | Indicates that a file descriptor or socket can read or write without blocking. |
Poller | Waits for I/O events. |
Traits
Source |