soio

Crates.iosoio
lib.rssoio
version0.2.3
sourcesrc
created_at2017-03-06 08:44:43.857435
updated_at2017-06-25 07:30:02.529871
descriptionI/O library for Rust
homepagehttps://github.com/mcorce/soio
repositoryhttps://github.com/mcorce/soio
max_upload_size
id8850
size199,866
(danclive)

documentation

https://docs.rs/soio

README

soio

Soio is a I/O library for Rust.

Based on carllerche/mio

crates.io 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
Commit count: 112

cargo fmt