From c5403b6e31925ff9e9a47c41198c80a7ac7796b3 Mon Sep 17 00:00:00 2001 From: lbl <1791778603@qq.com> Date: Fri, 21 Aug 2026 02:55:08 +0800 Subject: [PATCH] =?UTF-8?q?fix(cli):=20=E7=BA=AF=E5=8F=82=E6=95=B0?= =?UTF-8?q?=E6=A8=A1=E5=BC=8F=E4=B8=8D=E5=86=8D=E9=9D=99=E9=BB=98=E4=B8=A2?= =?UTF-8?q?=E5=BC=83=20--tunnel-port?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit build_from_args_only 用 ..Default::default() 填充其余字段, args.tunnel_port 被丢弃,纯命令行参数模式下隧道端口设置无效。 顺带修复 vnt-ipc feature 下 main_cli.rs 的 clippy never_loop (此前验证未覆盖该 feature):loop 两臂都直接 break,去掉 loop。 测试:test_args_only_keeps_tunnel_port 验证参数透传到 Config。 --- src/args_config.rs | 24 ++++++++++++++++++++++++ src/main_cli.rs | 13 ++++--------- 2 files changed, 28 insertions(+), 9 deletions(-) diff --git a/src/args_config.rs b/src/args_config.rs index 507a722..9bae32d 100644 --- a/src/args_config.rs +++ b/src/args_config.rs @@ -295,6 +295,7 @@ fn build_from_args_only(args: Args) -> anyhow::Result<(Config, CtrlConfig)> { mtu: args.mtu, port_mapping: args.port_mapping, allow_port_mapping: args.allow_mapping, + tunnel_port: args.tunnel_port, ..Default::default() }; let ctrl_config = CtrlConfig { @@ -475,3 +476,26 @@ server = ["quic://1.2.3.4:29872"] Ok(()) } } + + +#[cfg(test)] +mod tests { + use super::*; + + /// 纯参数模式下 --tunnel-port 不能被静默丢弃 + #[test] + fn test_args_only_keeps_tunnel_port() { + let args = Args::try_parse_from([ + "vnt", + "-s", + "quic://127.0.0.1:29872", + "-n", + "test-net", + "--tunnel-port", + "12345", + ]) + .unwrap(); + let (config, _) = build_from_args_only(args).unwrap(); + assert_eq!(config.tunnel_port, Some(12345)); + } +} diff --git a/src/main_cli.rs b/src/main_cli.rs index 4adf8ce..7c0daf4 100644 --- a/src/main_cli.rs +++ b/src/main_cli.rs @@ -143,16 +143,11 @@ async fn main0() -> anyhow::Result<()> { } }); } - loop { - tokio::select! { - _ = network_manager.wait_all_stopped() => { - break; - } + tokio::select! { + _ = network_manager.wait_all_stopped() => {} - _ = tokio::signal::ctrl_c() => { - log::info!("Ctrl+c received!"); - break; - } + _ = tokio::signal::ctrl_c() => { + log::info!("Ctrl+c received!"); } } drop(task_group_guard);