14 个版本

使用旧的 Rust 2015

0.2.3 2017 年 6 月 25 日
0.2.2 2017 年 6 月 21 日
0.2.1 2017 年 5 月 27 日
0.1.9 2017 年 3 月 22 日

#8 in #kqueue

32 每月下载量

MIT 许可证

200KB
3K SLoC

soio

Soio 是一个 Rust 的 I/O 库。

基于 carllerche/mio

Build Status

文档

用法

首先,将以下内容添加到您的 Cargo.toml

[dependencies]
soio = "0.1"

然后,将以下内容添加到您的 crate 根目录

extern crate soio:

示例

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!(),
        }
    }
}

特性

  • 由 epoll、kqueue 支持
  • 非阻塞 TCP、UDP 套接字
  • 线程安全的跨线程通信消息通道

平台

  • Linux
  • OS X
  • NetBSD

依赖项

~205KB