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.
Features
- Non-blocking TCP, UDP
- Timer, Channel, Broadcast
- I/O event notification queue backed by epoll, kqueue, and IOCP
- Zero allocations at runtime
- Platform specific extensions
Non-goals
The following are specifically omitted from retty-io and are left to the user or higher-level libraries.
- File operations
- Thread pools / multi-threaded event loop
Platforms
Currently supported platforms:
- Linux
- OS X
- Windows
- FreeBSD
- NetBSD
- Android
- iOS
retty-io 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 retty-io 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 retty_io::*;
use retty_io::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
- Thread safe communication broadcast channel implementing
Evented
- Thread safe communication channel implementing
Evented
- Readiness event types and utilities.
- Lazily filled
Cell
. - Networking primitives
- Timer optimized for I/O related operations
- Unix only extensions
Structs
- A collection of readiness events.
- Polls for readiness events on all registered values.
- Options supplied when registering an
Evented
handle withPoll
- A set of readiness event kinds
- Handle to a user space
Poll
registration. - Updates the readiness state of the associated
Registration
. - Associates readiness notifications with
Evented
handles.