Skip to content

Commit beb5823

Browse files
committed
support listening on uds
1 parent c757a15 commit beb5823

File tree

3 files changed

+40
-38
lines changed

3 files changed

+40
-38
lines changed

Cargo.lock

+25-24
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ keywords = ["ip", "proxy", "geolocation", "lichess"]
99
edition = "2021"
1010

1111
[dependencies]
12-
axum = "0.8.0-rc.1"
12+
axum = "0.8"
1313
tokio = { version = "1", features = ["full"] }
1414
serde = { version = "1", features = ["derive"] }
1515
serde_with = "3"

src/main.rs

+14-13
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ use listenfd::ListenFd;
1010
use serde::{Deserialize, Serialize};
1111
use serde_with::{formats::CommaSeparator, serde_as, StringWithSeparator};
1212
use tikv_jemallocator::Jemalloc;
13-
use tokio::net::TcpListener;
13+
use tokio::net::{TcpListener, UnixListener};
1414

1515
#[global_allocator]
1616
static GLOBAL: Jemalloc = Jemalloc;
@@ -93,16 +93,17 @@ async fn main() {
9393
.route("/batch", get(move |query| batch_query(db, query)))
9494
.route("/status", get(move || status(db)));
9595

96-
let listener = match ListenFd::from_env()
97-
.take_tcp_listener(0)
98-
.expect("tcp listener")
99-
{
100-
Some(std_listener) => {
101-
std_listener.set_nonblocking(true).expect("set nonblocking");
102-
TcpListener::from_std(std_listener).expect("listener")
103-
}
104-
None => TcpListener::bind(&opt.bind).await.expect("bind"),
105-
};
106-
107-
axum::serve(listener, app).await.expect("serve");
96+
let mut fds = ListenFd::from_env();
97+
if let Ok(Some(uds)) = fds.take_unix_listener(0) {
98+
uds.set_nonblocking(true).expect("set nonblocking");
99+
let listener = UnixListener::from_std(uds).expect("listener");
100+
axum::serve(listener, app).await.expect("serve");
101+
} else if let Ok(Some(tcp)) = fds.take_tcp_listener(0) {
102+
tcp.set_nonblocking(true).expect("set nonblocking");
103+
let listener = TcpListener::from_std(tcp).expect("listener");
104+
axum::serve(listener, app).await.expect("serve");
105+
} else {
106+
let listener = TcpListener::bind(&opt.bind).await.expect("bind");
107+
axum::serve(listener, app).await.expect("serve");
108+
}
108109
}

0 commit comments

Comments
 (0)