Crate mio[−][src]
A fast, low-level IO library for Rust focusing on non-blocking APIs, event notification, and other useful utilities for building high performance IO apps.
Goals
- Fast - minimal overhead over the equivalent OS facilities (epoll, kqueue, etc...)
- Zero allocations
- A scalable readiness-based API, similar to epoll on Linux
- Design to allow for stack allocated buffers when possible (avoid double buffering).
- Provide utilities such as a timers, a notification channel, buffer abstractions, and a slab.
Platforms
Currently supported platforms:
- Linux
- OS X
- Windows
- FreeBSD
- NetBSD
- Android
- iOS
mio can handle interfacing with each of the event notification systems of the aforementioned platforms. The details of
their implementation are further discussed in Poll
.
Usage
Using mio starts by creating a Poll
, which reads events from the OS and
put them into Events
. You can handle IO events from the OS with it.
For more detail, see Poll
.
Example
use mio::*; use mio::net::{TcpListener, TcpStream}; // Setup some tokens to allow us to identify which event is // for which socket. const SERVER: Token = Token(0); const CLIENT: Token = Token(1); let addr = "127.0.0.1:13265".parse().unwrap(); // Setup the server socket let server = TcpListener::bind(&addr).unwrap(); // Create a poll instance let poll = Poll::new().unwrap(); // Start listening for incoming connections poll.register(&server, SERVER, Ready::readable(), PollOpt::edge()).unwrap(); // Setup the client socket let sock = TcpStream::connect(&addr).unwrap(); // Register the socket poll.register(&sock, CLIENT, Ready::readable(), PollOpt::edge()).unwrap(); // Create storage for events let mut events = Events::with_capacity(1024); loop { poll.poll(&mut events, None).unwrap(); for event in events.iter() { match event.token() { SERVER => { // Accept and drop the socket immediately, this will close // the socket and notify the client of the EOF. let _ = server.accept(); } CLIENT => { // The server just shuts down the socket, let's just exit // from our event loop. return; } _ => unreachable!(), } } }
Modules
event |
Readiness event types and utilities. |
net |
Networking primitives |
unix |
Unix only extensions |
Structs
Events |
A collection of readiness events. |
Poll |
Polls for readiness events on all registered values. |
PollOpt |
Options supplied when registering an |
Ready |
A set of readiness event kinds |
Registration |
Handle to a user space |
SetReadiness |
Updates the readiness state of the associated |
Token |
Associates readiness notifications with |