@@ -11,13 +11,14 @@ use relay::dns_resolver::resolve;
1111use relay:: socks5:: Address ;
1212use relay:: tcprelay:: crypto_io:: { DecryptedRead , EncryptedWrite } ;
1313
14+ use futures:: future:: join_all;
1415use futures:: stream:: Stream ;
1516use futures:: { self , Future } ;
1617
1718use tokio;
1819use tokio:: net:: { TcpListener , TcpStream } ;
1920use tokio_io:: io:: { ReadHalf , WriteHalf } ;
20- use tokio_io:: { AsyncRead , IoFuture } ;
21+ use tokio_io:: AsyncRead ;
2122
2223use super :: { proxy_handshake, try_timeout, tunnel, DecryptedHalf , EncryptedHalfFut , TcpStreamConnect } ;
2324
@@ -163,7 +164,7 @@ fn handle_client(server_cfg: Arc<ServerConfig>,
163164
164165/// Runs the server
165166pub fn run ( config : Arc < Config > ) -> impl Future < Item = ( ) , Error = io:: Error > + Send {
166- let mut fut : Option < IoFuture < ( ) > > = None ;
167+ let mut vec_fut = Vec :: with_capacity ( config . server . len ( ) ) ;
167168
168169 for svr_cfg in & config. server {
169170 let listener = {
@@ -190,11 +191,8 @@ pub fn run(config: Arc<Config>) -> impl Future<Item = (), Error = io::Error> + S
190191 err
191192 } ) ;
192193
193- fut = Some ( match fut. take ( ) {
194- Some ( fut) => Box :: new ( fut. join ( listening) . map ( |_| ( ) ) ) as IoFuture < ( ) > ,
195- None => Box :: new ( listening) as IoFuture < ( ) > ,
196- } )
194+ vec_fut. push ( boxed_future ( listening) ) ;
197195 }
198196
199- fut . expect ( "Must have at least one server" )
197+ join_all ( vec_fut ) . map ( |_| ( ) )
200198}
0 commit comments