Expand description
Library for abstracting over TCP server sockets, UNIX server sockets, inetd-like mode.
ListenerAddress
is like SocketAddr
and Listener
is like TcpListener
, but with more flexibility.
let addr1 : ListenerAddress = "127.0.0.1:8087".parse().unwrap();
let addr2 : ListenerAddress = "/path/to/socket".parse().unwrap();
let addr3 : ListenerAddress = "@abstract_linux_address".parse().unwrap();
let system_options : SystemOptions = Default::default();
let user_options : UserOptions = Default::default();
let mut l = Listener::bind(&addr1, &system_options, &user_options).await.unwrap();
while let Ok((conn, addr)) = l.accept().await {
// ...
}
There is special integration with clap
:
use clap::Parser;
#[derive(Parser)]
/// Demo application for tokio-listener
struct Args {
#[clap(flatten)]
listener: tokio_listener::ListenerAddressPositional,
}
let args = Args::parse();
let listener = args.listener.bind().await.unwrap();
let app = axum06::Router::new().route("/", axum06::routing::get(|| async { "Hello, world\n" }));
axum06::Server::builder(listener).serve(app.into_make_service()).await;
See project README for details and more examples.
§Feature flags
clap
— Enablederive(Parser)
forUserOptions
and other Clap helpersuser_facing_default
(enabled by default) — Subset of default features that add features supposed to be accessed by end userserde
— Enableserde::Serialize
andserde::Deserialize
implementations forUserOptions
andListenerAddress
and some other types.hyper014
— Enablehyper(v0.14)::server::accept::Accept
implementation forListener
axum07
— Enable tokio-listener-adaptedserve
function from Axum 0.7 (and related types)inetd
— Enable inetd (stdin/stdout) modeunix
— Enable UNIX socket modeunix_path_tools
— Enable tools such as unlink/chmod/chown for UNIX path sockets inUserOptions
sd_listen
— Enable receiving pre-bound sockets from inherited file descriptor (e.g. from systemd). Disabling this should make the crateunsafe
-free.socket_options
— Enable socket options such as receive or send buffer sizes or keepalives inUserOptions
tonic010
— Enabletonic(v0.10)::transport::server::Connected
implementation forConnection
tonic011
— Enabletonic(v0.11)::transport::server::Connected
implementation forConnection
tonic012
— Enabletonic(v0.12)::transport::server::Connected
implementation forConnection
tokio-util
(enabled by default) — Enabletokio_util::net::Listener
implementation forListener
.multi-listener
— EnableListener::bind_multiple
andsd-listen:*
(if combined withsd_listen
feature)
Disabling default features bring tokio-listener close to usual TcpListener
.
Modules§
- Analogue of
axum::serve
module, but for tokio-listener.
Structs§
- Accepted connection, which can be a TCP socket, AF_UNIX stream socket or a stdin/stdout pair.
- Configured TCP.
AF_UNIX
or other stream socket acceptor. - Clap helper to provide optional listener address a named argument
--listen-address
or-l
. - Clap helper to require listener address as a required positional argument
listen_address
, forclap(flatten)
-ing into your primary options struct. - Listener options that are supposed to be hard coded in the code (not configurable by user)
- Value of
--tcp-keepalive
option. - User options that supplement listening address.
Enums§
tokio-listener
-specific accept errors, to be packed instd::io::Error::other
.tokio-listener
-specific bind errors, to be packed instd::io::Error::other
.- Abstraction over socket address that instructs in which way and at what address (if any) [
Listener
] should listen for incoming stream connections. - Some form of accepted connection’s address. Variant depends on variant used in [
ListenerAddress
]. - Other representation of
SomeSocketAddr
with Arc-wrapped Unix addresses to enable cloning - Value of
--unix-listen-chmod
option which allows changing DAC file access mode for UNIX path socket