2 个不稳定版本
0.2.0 | 2024年1月18日 |
---|---|
0.1.0 | 2023年10月27日 |
#1969 in 嵌入式开发
每月下载次数:23
用于 coap-message-demos
28KB
502 行
std-embedded-nal-async
此软件包实现了 embedded-nal-async 网络特性,适用于支持标准库网络功能的操作系统。
在这方面,它对于 embedded-nal 的作用类似于 linux-embedded-hal 对于 embedded-hal:一种在 Linux 上使用为裸机嵌入式世界编写的库的方法。(只是网络接口比硬件访问标准化得更好,因此应该在任何 POSIX 系统上都能工作)。
用法
由于操作系统的网络堆栈始终可用,因此可以随时实例化和使用它,无需同步,大致如下
use std_embedded_nal_async::Stack;
let message = [0x50, 0x01, 0x00, 0x00];
let mut stack = Stack::default();
let (_local, mut sock) = stack.connect("[::1]:5683".parse()?).await?;
sock.send(&message).await?;
请参阅示例以获取完整和可工作的版本。
可移植性
与阻塞特性不同,针对异步特性所做的设计决策确保本地系统的 UDP 地址始终可用,这对于许多基于 UDP 的服务至关重要——但标准库并没有提供此类功能。
它们在 POSIX 系统中以标准化的形式提供,这就是为什么(与 std-embedded-nal 不同),此软件包依赖于 nix 以提供 recvmsg()
系统调用。
对于熟悉该平台的开发者来说,添加对 Windows 的支持应该是直截了当的,因为其软件包 表明支持等效操作。
与 IPv4 相关的实现选择
在大多数现代 UNIX 系统中,使用 IPv4 的方式有两种:通过 IPv4 套接字,以及通过使用 V4MAPPED 地址的 IPv6 套接字。
该库目前实现了前者,以利于没有实现映射机制的FreeBSD系统,并且因为标准库的地址使使用该模式变得更加容易(枚举V4/V6地址,而不是V6地址,这些地址可能是V4映射的)。由于这条途径涉及一些代码重复和维护开销(特别是,它需要通过一个可能具有平台特定性的pktinfo结构,而不是来自RFC 3542的struct in6_pktinfo
),因此该选择被认为是实现细节,该库可能在以后切换到使用V4映射地址(或引入使用任一地址的功能)。
依赖关系
~6–16MB
~208K SLoC