mirror of https://github.com/ospab/ostp.git
fix(tun): resolve OS error 10049 for TCP bypass on Windows and fix 16GB memory leak by bounding smoltcp channels
This commit is contained in:
parent
c36e7373e8
commit
e0a13702ea
|
|
@ -315,7 +315,7 @@ impl Bridge {
|
|||
self.metrics.connection_state.store(1, Ordering::Relaxed);
|
||||
|
||||
let session_count = if self.mux_enabled { self.mux_sessions.max(1) } else { 1 };
|
||||
let (udp_tx, udp_rx) = mpsc::channel(100000);
|
||||
let (udp_tx, udp_rx) = mpsc::channel(1024);
|
||||
let mut sessions = Vec::with_capacity(session_count);
|
||||
let mut rtt_sum = 0.0;
|
||||
let mut successful_sessions = 0;
|
||||
|
|
@ -412,7 +412,7 @@ impl Bridge {
|
|||
self.last_valid_recv = Instant::now() - Duration::from_secs(100);
|
||||
|
||||
let session_count = if self.mux_enabled { self.mux_sessions.max(1) } else { 1 };
|
||||
let (udp_tx, udp_rx) = mpsc::channel(100000);
|
||||
let (udp_tx, udp_rx) = mpsc::channel(1024);
|
||||
let mut new_sessions = Vec::with_capacity(session_count);
|
||||
let mut successful_sessions = 0;
|
||||
let mut rtt_sum = 0.0;
|
||||
|
|
@ -548,7 +548,7 @@ impl Bridge {
|
|||
self.metrics.connection_state.store(1, Ordering::Relaxed);
|
||||
|
||||
let session_count = if self.mux_enabled { self.mux_sessions.max(1) } else { 1 };
|
||||
let (udp_tx, udp_rx) = mpsc::channel(100000);
|
||||
let (udp_tx, udp_rx) = mpsc::channel(1024);
|
||||
let mut new_sessions = Vec::with_capacity(session_count);
|
||||
let mut successful_sessions = 0;
|
||||
let mut rtt_sum = 0.0;
|
||||
|
|
|
|||
|
|
@ -104,9 +104,9 @@ pub async fn run_native_tunnel(
|
|||
|
||||
// ── 7. Build smoltcp network stack ────────────────────────────────────────
|
||||
let (stack, tcp_runner, udp_socket, tcp_listener) = StackBuilder::default()
|
||||
.stack_buffer_size(100_000)
|
||||
.tcp_buffer_size(100_000)
|
||||
.udp_buffer_size(100_000)
|
||||
.stack_buffer_size(1024)
|
||||
.tcp_buffer_size(1024)
|
||||
.udp_buffer_size(1024)
|
||||
.enable_tcp(true)
|
||||
.enable_udp(true)
|
||||
.mtu(config.ostp.mtu)
|
||||
|
|
@ -454,9 +454,9 @@ pub async fn run_native_tunnel_from_fd(
|
|||
let tun_stream = tokio::io::unix::AsyncFd::new(file)?;
|
||||
|
||||
let (stack, tcp_runner, udp_socket, tcp_listener) = StackBuilder::default()
|
||||
.stack_buffer_size(100_000)
|
||||
.tcp_buffer_size(100_000)
|
||||
.udp_buffer_size(100_000)
|
||||
.stack_buffer_size(1024)
|
||||
.tcp_buffer_size(1024)
|
||||
.udp_buffer_size(1024)
|
||||
.enable_tcp(true)
|
||||
.enable_udp(true)
|
||||
.mtu(config.ostp.mtu)
|
||||
|
|
|
|||
|
|
@ -30,7 +30,7 @@ pub async fn run_udp_nat(
|
|||
if payload.is_empty() { continue; }
|
||||
|
||||
if !sessions.contains_key(&src) {
|
||||
let (session_tx, mut session_rx) = mpsc::channel::<(Vec<u8>, SocketAddr)>(100000);
|
||||
let (session_tx, mut session_rx) = mpsc::channel::<(Vec<u8>, SocketAddr)>(1024);
|
||||
sessions.insert(src, session_tx);
|
||||
|
||||
let proxy_addr_clone = proxy_addr.clone();
|
||||
|
|
@ -89,9 +89,15 @@ pub async fn run_udp_nat(
|
|||
}
|
||||
|
||||
if let Some(sender) = sessions.get(&src) {
|
||||
if sender.send((payload, dst)).await.is_err() {
|
||||
match sender.try_send((payload, dst)) {
|
||||
Err(mpsc::error::TrySendError::Closed(_)) => {
|
||||
sessions.remove(&src);
|
||||
}
|
||||
Err(mpsc::error::TrySendError::Full(_)) => {
|
||||
// Drop packet to avoid blocking the TUN interface loop
|
||||
}
|
||||
Ok(_) => {}
|
||||
}
|
||||
}
|
||||
}
|
||||
None => break,
|
||||
|
|
|
|||
Loading…
Reference in New Issue