Add support for systemd socket activation

Co-authored-by: Jason Volk <jason@zemos.net>
Signed-off-by: Vasiliy Stelmachenok <ventureo@cachyos.org>
This commit is contained in:
Vasiliy Stelmachenok
2026-03-08 17:14:36 +03:00
parent 13c038e254
commit f3db71b32e
3 changed files with 89 additions and 29 deletions

View File

@@ -1,4 +1,7 @@
use std::{net::SocketAddr, sync::Arc};
use std::{
net::{SocketAddr, TcpListener},
sync::Arc,
};
use axum::Router;
use axum_server::Handle;
@@ -11,12 +14,14 @@ pub(super) fn serve(
handle: &Handle<SocketAddr>,
join_set: &mut JoinSet<Result<(), std::io::Error>>,
addrs: &[SocketAddr],
listeners: &Vec<TcpListener>,
) {
let router = router
.clone()
.into_make_service_with_connect_info::<SocketAddr>();
for addr in addrs {
let acceptor = axum_server::bind(*addr)
for listener in listeners {
let acceptor = axum_server::from_tcp(listener.try_clone().unwrap())
.unwrap()
.handle(handle.clone())
.serve(router.clone());
join_set.spawn_on(acceptor, server.runtime());