#unix-socket #file-descriptor #unix #fd #sockets #domain

fd-queue

支持在 Unix 套接字上传递文件描述符的库

9 个版本 (2 个稳定版)

1.1.0 2022 年 8 月 21 日
1.0.0 2022 年 7 月 18 日
1.0.0-beta.32020 年 12 月 28 日
1.0.0-beta.22020 年 9 月 26 日

Unix API 排名第 519

Download history 35/week @ 2024-03-28 30/week @ 2024-04-04

每月下载量 56
3 个crate中使用(直接使用2个)

MIT/Apache 协议

105KB
1.5K SLoC

FD Queue

FD Queue 是 Rust 用于在进程间传递文件描述符的抽象。

CI doc Crates.io Release

fd-queue 提供了用于将文件描述符入队和出队的 trait,以及不同类型 Unix 套接字的这些 trait 的实现。具体来说,fd-queue 提供了基于阻塞实现的版本、基于 mio 的非阻塞实现版本,以及基于 tokio 的非阻塞实现版本。

使用方法

将以下内容添加到您的 Cargo.toml

[dependencies]
fd-queue = {version = "1.0.0", features = ["net-fd"]}

这启用了队列和出队文件描述符 trait 的阻塞实现。下面将介绍其他特性。然后您可以使用该库,如下所示:

use std::{
    fs::File,
    io::prelude::*,
    os::unix::io::FromRawFd,
};
use fd_queue::{EnqueueFd, DequeueFd, UnixStream};

let (mut sock1, mut sock2) = UnixStream::pair()?;

// sender side
let file: File = ...
sock1.enqueue(&file).expect("Can't enquque the file descriptor.");
sock1.write(b"a")?;
sock1.flush()?;

//receiver side
let mut buf = [0u8; 1];
sock2.read(&mut buf)?;
let fd = sock2.dequeue().expect("Can't dequeue the file descriptor.");
let file2 = unsafe { File::from_raw_fd(fd) };

特性

使用默认特性时,库将仅包含基本的 trait 定义 DequeueFdEnqueueFd 以及其支持类型。使用默认特性时,不会实现基本 trait。要包含 trait 的实现,启用以下特性:

特性 实现 其他特性
net-fd 阻塞 Read, Write
mio-fd 非阻塞 Read, Write, Evented
tokio-fd 非阻塞 AsyncRead, AsyncWrite

Rust 版本要求

该库将始终支持比当前稳定版早两个版本的 Rust 版本。当前的最低支持 Rust 版本 (MSRV) 是 1.61.0。对 MSRV 的任何更改将按语义版本控制的次要更改处理。

语义版本和发布

此库遵循 语义版本控制

库的第一个非预发布版本将是1.0.0。这并不意味着库已经准备好投入生产或我们将会尽量避免破坏性变更。它实际上表明了语义版本控制规范(Semantic Versioning Specification)所说的内容:在2.0.0版本之前不会有任何向后不兼容的变更(参见这里)。

关于库的成熟度,请参阅下一部分,随着库的成熟,这部分将会更新。

成熟度

这个库是一个初始的、实验性的实现,尚未在生产中使用。你应该预计在库成熟过程中会出现破坏性变更(语义版本将有适当的变化)。

许可证

FD Queue许可证采用以下其中之一:

任选其一。

贡献

请注意,此项目发布时附带贡献者行为准则。通过参与此项目,您同意遵守其条款。

除非您明确声明,否则您提交的任何有意包含在FD Queue中的贡献,根据Apache-2.0许可证的定义,将如上所述双重许可,没有任何附加条款或条件。

依赖项

~0.1–13MB
~92K SLoC