1个不稳定版本
0.1.0 | 2021年2月12日 |
---|
#33 in #mio
22KB
308 代码行
udplite
一个用于使用UDP-Lite套接字的Rust库。 (RFC 3828)
extern crate udplite;
let socket = udplite::UdpLiteSocket::bind("[::]:0").expect("Create UDP-Lite socket");
socket.set_send_checksum_coverage(Some(0)).expect("disable checksum coverage for payload");
socket.connect("localhost:7").expect("set destination");
socket.send(b"Hello UDP-Lite").expect("send datagram");
此crate正在开发中。
支持的操作系统
UDP-Lite仅在Linux和FreeBSD中实现。Android是否支持它我不确定:内核有常数,但其中一些在bionic(Android libc)中缺失。(只有IPPROTO_UDPLITE
存在)
FreeBSD的实现也表现得很奇怪:未被校验和完全覆盖的发送数据包(UDPLITE_SEND_CSCOV
)似乎被操作系统丢弃。(与此同时,Linux发送的此类数据包被接收)
mio集成
与UDP套接字一样,UDP-Lite套接字可以注册到epoll / kqueue,因此可以使用mio。此功能默认未启用;在Cargo.toml中启用它:
[dependencies]
udplite = {version="0.1.0", features=["mio_07"]}
还要记得为套接字启用非阻塞模式。(UdpLiteSocket.set_nonblocking(true)
)
最小支持的Rust版本
最小支持的Rust版本是1.36。旧版本可能目前仍然可以使用,但我计划使用std::io::IoSlice
。
许可证
在以下任一许可下授权:
- Apache许可证版本2.0,(LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
- MIT许可证(LICENSE-MIT 或 http://opensource.org/licenses/MIT)
供您选择。
贡献
除非您明确声明,否则根据Apache-2.0许可证定义的,您有意提交用于工作内容的任何贡献都应双许可,如上所述,不附加任何额外条款或条件。
依赖项
~0–475KB