@@ -7,7 +7,7 @@ use std::task::{Context, Poll};
7
7
use anyhow:: Error ;
8
8
use futures:: TryStreamExt ;
9
9
use http:: { Method , Request , Response , StatusCode } ;
10
- use hyper:: server:: conn:: { Connection , Http } ;
10
+ use hyper:: server:: conn:: { Http } ;
11
11
use hyper:: service:: Service ;
12
12
use hyper:: Body ;
13
13
use tokio:: select;
@@ -16,7 +16,9 @@ use tokio::sync::Mutex;
16
16
use tokio:: task:: JoinHandle ;
17
17
use tracing:: instrument;
18
18
19
- use crate :: cmd:: interactive:: stdio:: StdStream ;
19
+ use tokio:: net:: { UnixListener } ;
20
+ #[ cfg( unix) ]
21
+ use std:: os:: unix:: io:: { FromRawFd } ;
20
22
use crate :: proxy:: config:: Config ;
21
23
use crate :: proxy:: exec:: Proxy ;
22
24
use crate :: raw_config:: RawConfig ;
@@ -43,21 +45,27 @@ impl ConfigServer {
43
45
pub fn serve_interactive ( & mut self ) {
44
46
let mut rx = self . rx . take ( ) . unwrap ( ) ;
45
47
let mut service = ConfigService ( self . proxy . clone ( ) ) ;
48
+
46
49
self . task = Some ( tokio:: spawn ( async move {
47
- let rx_mut = & mut rx;
50
+ let rx_mut = & mut rx;
51
+ let unix_listener = UnixListener :: from_std ( unsafe { std:: os:: unix:: net:: UnixListener :: from_raw_fd ( 3 ) } ) . unwrap ( ) ;
52
+
48
53
loop {
49
- let stream = StdStream :: default ( ) ;
50
- let mut conn = Http :: new ( ) . serve_connection ( stream, & mut service) ;
51
- let conn_mut = & mut conn;
52
54
select ! {
53
55
_ = & mut * rx_mut => {
54
56
tracing:: trace!( "catch signal in config server." ) ;
55
- Connection :: graceful_shutdown( Pin :: new( conn_mut) ) ;
56
57
return Ok ( ( ) ) ;
57
58
} ,
58
- ret = & mut * conn_mut => if let Err ( e) = ret {
59
- tracing:: error!( "{}" , e) ;
60
- }
59
+ stream = unix_listener. accept( ) => {
60
+ let ( stream, _) = stream. unwrap( ) ;
61
+
62
+ let http = Http :: new( ) ;
63
+ let conn = http. serve_connection( stream, & mut service) ;
64
+ if let Err ( e) = conn. await {
65
+ tracing:: error!( "{}" , e) ;
66
+ return Err ( anyhow:: anyhow!( "{}" , e) ) ;
67
+ }
68
+ } ,
61
69
} ;
62
70
}
63
71
} ) ) ;
0 commit comments