3 个版本
0.2.2 | 2023 年 8 月 10 日 |
---|---|
0.2.1 | 2021 年 8 月 13 日 |
0.2.0 | 2021 年 8 月 11 日 |
#841 in Unix APIs
在 miku-rpc 中使用
29KB
455 行代码(不包括注释)
Epoll-rs
是什么?
Epoll-rs 是对 Linux 的 epoll 接口的难以误用的高级绑定。它提供了一个 Epoll
类型,它封装了一个 epoll 文件描述符,就像 std::fs::File
封装了常规文件描述符一样。
为什么
epoll 太底层。它是对 epoll 的安全封装,因此不需要使用不安全的代码,但它有一些锋利的边缘,比如需要使用 epoll::close
而不是在 drop
时自动调用 close,并让 API 消费者只与 RawFd
而不是 File
交互。
Mio 太复杂了,因为它旨在支持多个平台,而 epoll-rs 则不是。
如何使用它?
请参阅示例目录和顶级 API 文档
lib.rs
:
一个易于使用且难以误用的 Rust 包装器,用于 Linux 的 epoll 接口。
使用 Epoll::new
创建一个新的 epoll 实例。使用 Epoll::add
添加任何实现了 OwnedRawFd
特性的结构体。epoll::add 返回一个 Token
,它接管了添加的文件。
use epoll_rs::{Epoll, Opts};
let mut epoll = Epoll::new()?;
let token = epoll.add(file, Opts::IN)?;
来自一个 epoll 实例的令牌不能与另一个实例一起使用。这样做将在调试模式下引发 panic,并在发布模式下产生未定义的行为。
use epoll_rs::{Epoll, Opts};
let mut epoll1 = Epoll::new()?;
let mut epoll2 = Epoll::new()?;
let token1 = epoll1.add(file, Opts::IN)?;
let res = epoll2.remove(token1); // <- undefined behavior in release mode
依赖项
~145KB