13 个版本
0.7.1 | 2023年11月15日 |
---|---|
0.7.0 |
|
0.6.0 |
|
0.5.6 | 2022年11月30日 |
0.3.0 |
|
#78 in Unix APIs
41,181 每月下载量
用于 fizyr-rpc
65KB
1K SLoC
tokio-seqpacket
Unix seqpacket 套接字为 tokio 提供。
Seqpacket 套接字具有许多有用的特性
- 它们是面向连接的。
- 它们保证了消息的顺序交付。
- 它们提供了用于传递文件描述符的具有良好定义语义的数据报。
这些特性使得 seqpacket 套接字非常适合需要与客户端传递文件描述符的本地服务器。
您可以使用 UnixSeqpacketListener
开始接受连接,或创建一个 UnixSeqpacket
来连接到监听套接字。您还可以使用 UnixSeqpacket::pair()
创建一对已连接的套接字。
传递文件描述符和其他辅助数据。
您可以使用 send_vectored_with_ancillary
和 recv_vectored_with_ancillary
来发送和接收辅助数据。这可以用于通过套接字传递文件描述符和 Unix 凭证。
&self
与 &mut self
Seqpacket套接字在从不同线程发送或接收同一套接字时具有明确的语义。虽然在这种情况下顺序没有保证,但每个数据报都将完整交付。自tokio 0.3以来,多个任务也可以等待相同的文件描述符。因此,现在所有I/O函数都使用&self
而不是&mut self
,并且split()
API已被弃用。
示例
use tokio_seqpacket::UnixSeqpacket;
let mut socket = UnixSeqpacket::connect("/run/foo.sock").await?;
socket.send(b"Hello!").await?;
let mut buffer = [0u8; 128];
let len = socket.recv(&mut buffer).await?;
println!("{}", String::from_utf8_lossy(&buffer[..len]));
依赖项
~2–10MB
~90K SLoC