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.
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
prelude | |
tcp | |
udp | |
unix | |
util |
Utilities for non-blocking IO programs |
Structs
EventLoop |
Single threaded IO event loop. |
EventLoopConfig |
Configure EventLoop runtime details |
EventSet | |
Events | |
Io | |
IoEvent | |
Ipv4Addr |
Representation of an IPv4 address. |
Ipv6Addr |
Representation of an IPv6 address. |
Poll | |
PollOpt | |
Selector | |
Sender |
Sends messages to the EventLoop from other threads. |
Timeout | |
TimerError | |
Token |
Enums
IpAddr |
An IP address, either a IPv4 or IPv6 address. |
NotifyError |
Traits
Evented |
A value that may be registered with an |
Handler | |
TryAccept | |
TryRead | |
TryWrite |
Type Definitions
TimerResult |