@@ -10,7 +10,7 @@ use listenfd::ListenFd;
10
10
use serde:: { Deserialize , Serialize } ;
11
11
use serde_with:: { formats:: CommaSeparator , serde_as, StringWithSeparator } ;
12
12
use tikv_jemallocator:: Jemalloc ;
13
- use tokio:: net:: TcpListener ;
13
+ use tokio:: net:: { TcpListener , UnixListener } ;
14
14
15
15
#[ global_allocator]
16
16
static GLOBAL : Jemalloc = Jemalloc ;
@@ -93,16 +93,17 @@ async fn main() {
93
93
. route ( "/batch" , get ( move |query| batch_query ( db, query) ) )
94
94
. route ( "/status" , get ( move || status ( db) ) ) ;
95
95
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
+ }
108
109
}
0 commit comments