Expand description
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.
§Usage
Using mio starts by creating an EventLoop, which handles receiving events from the OS and dispatching them to a supplied Handler.
§Example
use mio::*;
use mio::tcp::{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 an event loop
let mut event_loop = EventLoop::new().unwrap();
// Start listening for incoming connections
event_loop.register(&server, SERVER, EventSet::readable(),
PollOpt::edge()).unwrap();
// Setup the client socket
let sock = TcpStream::connect(&addr).unwrap();
// Register the socket
event_loop.register(&sock, CLIENT, EventSet::readable(),
PollOpt::edge()).unwrap();
// Define a handler to process the events
struct MyHandler(TcpListener);
impl Handler for MyHandler {
type Timeout = ();
type Message = ();
fn ready(&mut self, event_loop: &mut EventLoop<MyHandler>, token: Token, _: EventSet) {
match token {
SERVER => {
let MyHandler(ref mut server) = *self;
// 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
// shutdown the event loop
event_loop.shutdown();
}
_ => panic!("unexpected token"),
}
}
}
// Start handling events
event_loop.run(&mut MyHandler(server)).unwrap();
Modules§
Structs§
- Event
Loop - Single threaded IO event loop.
- Event
Loop Config - Configure EventLoop runtime details
- Event
Set - Events
- Io
- IoEvent
- Ipv4
Addr - An IPv4 address.
- Ipv6
Addr - An IPv6 address.
- Poll
- PollOpt
- Selector
- Sender
- Sends messages to the EventLoop from other threads.
- Timeout
- Timer
Error - Token
Enums§
- IpAddr
- An IP address, either a IPv4 or IPv6 address.
- Notify
Error