14 releases

Uses old Rust 2015

0.2.3 Jun 25, 2017
0.2.2 Jun 21, 2017
0.2.1 May 27, 2017
0.1.9 Mar 22, 2017

#8 in #kqueue

32 downloads per month

MIT license

200KB
3K SLoC

soio

Soio is a I/O library for Rust.

Based on carllerche/mio

Build Status

Document

Usage

First, add this to your Cargo.toml:

[dependencies]
soio = "0.1"

Then, add this to your crate root:

extern crate soio:

Example:

use soio::{Events, Poll, Ready, PollOpt, Token};
use soio::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 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!(),
        }
    }
}

Feature

  • Bakced by epoll, kqueue
  • Non-blocking TCP, UDP sockets
  • Thread safe message channel for cross thread communication

Platforms

  • Linux
  • OS X
  • NetBSD

Dependencies

~205KB