Skip to content

Commit 1e6bc3b

Browse files
committed
Optimize server listening logic, join_all
1 parent b4f44f4 commit 1e6bc3b

File tree

1 file changed

+5
-7
lines changed

1 file changed

+5
-7
lines changed

src/relay/tcprelay/server.rs

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,14 @@ use relay::dns_resolver::resolve;
1111
use relay::socks5::Address;
1212
use relay::tcprelay::crypto_io::{DecryptedRead, EncryptedWrite};
1313

14+
use futures::future::join_all;
1415
use futures::stream::Stream;
1516
use futures::{self, Future};
1617

1718
use tokio;
1819
use tokio::net::{TcpListener, TcpStream};
1920
use tokio_io::io::{ReadHalf, WriteHalf};
20-
use tokio_io::{AsyncRead, IoFuture};
21+
use tokio_io::AsyncRead;
2122

2223
use 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
165166
pub 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

Comments
 (0)