首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

006 Rust 网络编程,mio 库介绍

mio

标准库也缺乏对套接字和连接的细粒度控制,例如设置SO_REUSEADDR。mio库则提供了很多方法来解决这些问题。

依赖

[dependencies]

mio = { version = "0.7.0", features = ["os-poll", "tcp"]}

源码示例

use mio::net::;

use mio::;

const SERVER: Token = Token(0);

const CLIENT: Token = Token(1);

fn main() -> std::io::Result {

let mut poll = Poll::new()?;

let mut events = Events::with_capacity(128);

// 创建server端socket

let addr = "127.0.0.1:8080".parse().unwrap();

let mut server = TcpListener::bind(addr)?;

// 开始监听该链接

poll.registry()

.register(&mut server, SERVER, Interest::READABLE)?;

// 创建客户端链接到服务端

let mut client = TcpStream::connect(addr)?;

// 监听客户端

poll.registry()

.register(&mut client, CLIENT, Interest::READABLE | Interest::WRITABLE)?;

// 启动循环

loop {

// 轮训事件

poll.poll(&mut events, None)?;

// 处理事件

let mut cnt = 0;

for event in events.iter() {

match event.token() {

SERVER => {

let connection = server.accept();

println!("SERVER recv a connection! cnt = {}", cnt);

drop(connection);

}

CLIENT => {

if event.is_writable() {

println!("CLIENT write, cnt = {}", cnt);

}

if event.is_readable() {

println!("CLIENT read, cnt = {}", cnt);

}

return Ok(());

}

_ => unreachable!(),

}

cnt += 1;

}

}

}

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20200425A0O9G900?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券