#sockets #mio #integration #send #wrapper #optional #idiomatic

udplite

一个符合习惯的UDP-Lite包装器,可选的mio集成

1个不稳定版本

0.1.0 2021年2月12日

#33 in #mio

Apache-2.0 / MIT

22KB
308 代码行

udplite

一个用于使用UDP-Lite套接字的Rust库。 (RFC 3828)

crates.io License Documentation

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许可证定义的,您有意提交用于工作内容的任何贡献都应双许可,如上所述,不附加任何额外条款或条件。

依赖项

~0–475KB