From 7e7aadb04b52c61412b917d8ed695f8f7801d97e Mon Sep 17 00:00:00 2001 From: ssrlive <30760636+ssrlive@users.noreply.github.com> Date: Sun, 3 Mar 2024 19:49:10 +0800 Subject: [PATCH] tun shutdown issues. (#97) --- Cargo.toml | 4 ++-- src/bin/main.rs | 4 ++-- src/lib.rs | 28 +++++++++++++++++----------- 3 files changed, 21 insertions(+), 15 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 950c1a1..f82ae9f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -15,7 +15,7 @@ crate-type = ["staticlib", "cdylib", "lib"] [dependencies] async-recursion = "1.0" async-trait = "0.1" -base64 = { version = "0.21" } +base64 = { version = "0.22" } chrono = "0.4" clap = { version = "4.5", features = ["derive", "wrap_help", "color"] } ctrlc2 = { version = "3.5", features = ["tokio", "termination"] } @@ -32,7 +32,7 @@ tokio = { version = "1.36", features = ["full"] } tokio-util = "0.7" tproxy-config = { version = "2.0", features = ["log"] } trust-dns-proto = "0.23" -tun2 = { version = "1.1", features = ["async"] } +tun2 = { version = "1.2", features = ["async"] } udp-stream = { version = "0.0", default-features = false } unicase = "2.7" url = "2.5" diff --git a/src/bin/main.rs b/src/bin/main.rs index 0293235..7be56ab 100644 --- a/src/bin/main.rs +++ b/src/bin/main.rs @@ -5,8 +5,8 @@ async fn main() -> Result<(), BoxError> { dotenvy::dotenv().ok(); let args = Args::parse_args(); - // let default = format!("{}={:?}", module_path!(), args.verbosity); - let default = format!("{:?}", args.verbosity); + // let default = format!("{}={:?},trust_dns_proto=warn", module_path!(), args.verbosity); + let default = format!("{:?},trust_dns_proto=warn", args.verbosity); env_logger::Builder::from_env(env_logger::Env::default().default_filter_or(default)).init(); let shutdown_token = tokio_util::sync::CancellationToken::new(); diff --git a/src/lib.rs b/src/lib.rs index 9020cb3..61cfdc3 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -222,17 +222,23 @@ async fn handle_tcp_session( let (mut t_rx, mut t_tx) = tokio::io::split(tcp_stack); let (mut s_rx, mut s_tx) = tokio::io::split(server); - for _ in 0..2 { - tokio::select! { - _ = tokio::io::copy(&mut t_rx, &mut s_tx) => { - s_tx.shutdown().await?; - }, - _ = tokio::io::copy(&mut s_rx, &mut t_tx) => { - t_tx.shutdown().await?; - }, - } - } - log::info!("Ending {}", session_info); + let res = tokio::join!( + async move { + let r = tokio::io::copy(&mut t_rx, &mut s_tx).await; + if let Err(err) = s_tx.shutdown().await { + log::trace!("{} s_tx shutdown error {}", session_info, err); + } + r + }, + async move { + let r = tokio::io::copy(&mut s_rx, &mut t_tx).await; + if let Err(err) = t_tx.shutdown().await { + log::trace!("{} t_tx shutdown error {}", session_info, err); + } + r + }, + ); + log::info!("Ending {} with {:?}", session_info, res); Ok(()) }