polling

Build License Cargo Documentation

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

```rust,no_run 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))?;
    }
}

} std::io::Result::Ok(()) ```

License

Licensed under either of

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.