3个版本
0.1.2 | 2024年7月13日 |
---|---|
0.1.1 | 2020年12月22日 |
0.1.0 | 2020年12月3日 |
204 in Unix APIs
143 monthly downloads
37KB
481 lines
systemd套接字
可选支持systemd套接字激活的便捷库。
关于
该库的目的是让项目中的systemd套接字激活变得简单。它提供了一个用于从字符串解析绑定地址的替代品,就像来自std
的地址一样,但除此之外还允许使用systemd://socket_name
格式的地址,告诉它使用给定套接字名的systemd激活。然后它提供了一个绑定地址的方法,如果可用,将返回来自systemd的套接字。
提供的类型支持从各种字符串类型转换,还支持通过功能标志启用serde
和parse_arg
。因此,对您代码的更改应该是最小的——解析将继续工作,它将只允许新的格式。您只需将代码更改为使用SocketAddr::bind()
而不是TcpListener::bind()
进行绑定即可。
您也不必担心条件编译以确保操作系统兼容性。此库会为您处理这个问题,通过在非Linux系统上禁用systemd。
此外,如果启用了适当的功能,该库还提供绑定tokio
0.2、0.3和async_std
套接字的方法。
示例
use systemd_socket::SocketAddr;
use std::convert::TryFrom;
use std::io::Write;
let mut args = std::env::args_os();
let program_name = args.next().expect("unknown program name");
let socket_addr = args.next().expect("missing socket address");
let socket_addr = SocketAddr::try_from(socket_addr).expect("failed to parse socket address");
let socket = socket_addr.bind().expect("failed to bind socket");
loop {
let _ = socket
.accept()
.expect("failed to accept connection")
.0
.write_all(b"Hello world!")
.map_err(|err| eprintln!("Failed to send {}", err));
}
功能
enable_systemd
- 默认启用,此功能的存在允许用户在不需要的情况下关闭systemd支持。请注意,在非Linux系统上已禁用,因此您不必担心。serde
- 为SocketAddr
实现serde::Deserialize
parse_arg
- 为SocketAddr
实现parse_arg::ParseArg
tokio
- 为SocketAddr
添加bind_tokio
方法tokio_0_2
- 为SocketAddr
添加bind_tokio_0_2
方法tokio_0_3
- 为SocketAddr
添加bind_tokio_0_3
方法async_std
- 为SocketAddr
添加bind_async_std
方法
MSRV
此crate必须始终使用最新版本的Rust在最新的Debian稳定版中编译。目前是Rust 1.41.1。(Debian 10 - Buster)
许可证
MITNFA
依赖关系
~0.3–12MB
~135K SLoC