sd-listen-fds

Documentation License: Apache 2.0 License: MIT

Exposes file descriptors passed in by systemd, the Linux init daemon, without dependencies, foreign or otherwise. Enables easy implementation of socket-activated services in pure Rust.

Unlike services that open sockets themselves, socket-activated services are started on-demand, may start up concurrently with their dependencies, and may be restarted without losing inbound data. Portable applications can call sd_listen_fds::get() and open their own socket if it succeeds with an empty Vec.

See also the sdlistenfds API exposed by the foreign libsystemd library. Compared to using libsystemd bindings, this crate is smaller, safer, and builds everywhere.

Example

rust let fds = sd_listen_fds::get().unwrap(); let (_name, fd) = fds .into_iter() .next() .expect("must be launched as a systemd socket-activated service"); let socket = TcpListener::from(fd);

my-service.socket (see also systemd.socket) ```ini [Socket]

TCP port number. Other types of sockets are also possible.

ListenStream=1234

[Install] WantedBy=sockets.target

[Unit] Description=My Rust service Documentation=https://example.com/my-service/ ```

my-service.service (see also systemd.service) ```ini [Service] ExecStart=/path/to/my-service

[Unit] Requires=my-service.socket Description=My Rust service Documentation=https://example.com/my-service/ ```

License

Licensed under either of

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.