Bind client UDP sockets by peer family
ci / test (push) Canceled after 0s
ci / fuzz-smoke (push) Canceled after 0s
ci / macos-client (macos-aarch64, macos-14) (push) Canceled after 0s
ci / macos-client (macos-x86_64, macos-13) (push) Canceled after 0s
ci / windows-client (push) Canceled after 0s
ci / package-release (linux-x86_64, ubuntu-latest, , , ) (push) Canceled after 0s
ci / package-release (macos-aarch64, macos-14, , , ) (push) Canceled after 0s
ci / package-release (macos-x86_64, macos-13, , , ) (push) Canceled after 0s
ci / package-release (windows-aarch64, windows-latest, aarch64, windows, aarch64-pc-windows-msvc) (push) Canceled after 0s
ci / package-release (windows-x86_64, windows-latest, , , ) (push) Canceled after 0s
ci / remote-bench (push) Canceled after 0s
ci / publish-gitea-release (push) Canceled after 0s

This commit is contained in:
DuProcess
2026-07-16 20:46:21 -04:00
parent 8644c22554
commit 2dc921b2d5
3 changed files with 33 additions and 10 deletions
+5 -5
View File
@@ -37,8 +37,8 @@ use dosh::transport::{
TransportEvent,
};
use dosh::udp::{
is_transient_udp_error, is_transient_udp_send_error, recv_udp_retrying_transient,
send_udp_retrying_transient,
bind_udp_for_peer, is_transient_udp_error, is_transient_udp_send_error,
recv_udp_retrying_transient, send_udp_retrying_transient,
};
use serde::{Deserialize, Serialize};
use sha2::{Digest, Sha256};
@@ -451,7 +451,7 @@ async fn main() -> Result<()> {
};
let cache_requested_env = requested_env(&config, &host, resolved_ssh_config.as_ref());
let socket = UdpSocket::bind("0.0.0.0:0").await?;
let socket = bind_udp_for_peer(resolve_addr(&target_udp_host, dosh_port)?).await?;
if let Some(mut cached) = credential.clone() {
cached.udp_host = target_udp_host.clone();
@@ -1955,7 +1955,7 @@ async fn run_doctor_for_host(
"[info] forwarding requested by config: agent={} default_session={}",
config.forward_agent, config.default_session
);
let socket = UdpSocket::bind("0.0.0.0:0").await?;
let socket = bind_udp_for_peer(resolve_addr(&udp_host, dosh_port)?).await?;
match try_native_auth_check(
&socket,
config,
@@ -2393,7 +2393,7 @@ async fn run_proxy_stdio_command(config: &dosh::config::ClientConfig, args: &Arg
let target_udp_host =
selected_udp_host(requested_udp_host.as_deref(), &server, &resolved_ssh_config)?;
let dosh_port = args.dosh_port.or(host.port).unwrap_or(config.dosh_port);
let socket = UdpSocket::bind("0.0.0.0:0").await?;
let socket = bind_udp_for_peer(resolve_addr(&target_udp_host, dosh_port)?).await?;
let session = args
.session
.clone()