tun shutdown issues. (#97)

This commit is contained in:
ssrlive 2024-03-03 19:49:10 +08:00 committed by GitHub
parent 4ab6f1a9bc
commit 7e7aadb04b
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 21 additions and 15 deletions

View file

@ -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"

View file

@ -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();

View file

@ -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?;
},
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);
}
log::info!("Ending {}", session_info);
r
},
);
log::info!("Ending {} with {:?}", session_info, res);
Ok(())
}