15 releases (5 stable)

new 1.1.0 Sep 20, 2020
1.0.3 Sep 16, 2020
0.1.9 Sep 6, 2020
0.1.6 Aug 29, 2020

#65 in Asynchronous

Download history 668/week @ 2020-08-03 9246/week @ 2020-08-10 20048/week @ 2020-08-17 22966/week @ 2020-08-24 21858/week @ 2020-08-31 26389/week @ 2020-09-07 32736/week @ 2020-09-14

44,722 downloads per month
Used in 612 crates (3 directly)

Apache-2.0 OR MIT

954 lines


Build License Cargo Documentation

Portable interface to epoll, kqueue, event ports, and wepoll.

Supported platforms:

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.


use polling::{Event, Poller};
use std::net::TcpListener;

// Create a TCP listener.
let socket = TcpListener::bind("")?;
let key = 7; // arbitrary key identifying the socket

// Create a poller and register interest in readability on the socket.
let poller = Poller::new()?;
poller.interest(&socket, Event::readable(key))?;

// The event loop.
let mut events = Vec::new();
loop {
    // Wait for at least one I/O event.
    poller.wait(&mut events, None)?;

    for ev in &events {
        if ev.key == key {
            // Perform a non-blocking accept operation.
            // Set interest in the next readability event.
            poller.interest(&socket, Event::readable(key))?;


Licensed under either of

at your option.


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.