13 个版本

0.7.1 2023年11月15日
0.7.0 2023年3月3日
0.6.0 2023年3月3日
0.5.6 2022年11月30日
0.3.0 2020年11月6日

#78 in Unix APIs

Download history 8032/week @ 2024-04-20 8820/week @ 2024-04-27 6566/week @ 2024-05-04 7566/week @ 2024-05-11 7848/week @ 2024-05-18 5666/week @ 2024-05-25 7675/week @ 2024-06-01 6589/week @ 2024-06-08 6242/week @ 2024-06-15 7938/week @ 2024-06-22 7092/week @ 2024-06-29 7282/week @ 2024-07-06 7727/week @ 2024-07-13 7785/week @ 2024-07-20 12623/week @ 2024-07-27 11809/week @ 2024-08-03

41,181 每月下载量
用于 fizyr-rpc

BSD-2-Clause

65KB
1K SLoC

Docs.rs Tests

tokio-seqpacket

Unix seqpacket 套接字为 tokio 提供。

Seqpacket 套接字具有许多有用的特性

  • 它们是面向连接的。
  • 它们保证了消息的顺序交付。
  • 它们提供了用于传递文件描述符的具有良好定义语义的数据报。

这些特性使得 seqpacket 套接字非常适合需要与客户端传递文件描述符的本地服务器。

您可以使用 UnixSeqpacketListener 开始接受连接,或创建一个 UnixSeqpacket 来连接到监听套接字。您还可以使用 UnixSeqpacket::pair() 创建一对已连接的套接字。

传递文件描述符和其他辅助数据。

您可以使用 send_vectored_with_ancillaryrecv_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