From 6ba57864a09ae57228d39ddc1a30dfc336ade2f4 Mon Sep 17 00:00:00 2001 From: Siavash Sameni Date: Tue, 31 Mar 2026 19:01:50 +0400 Subject: [PATCH] Fix IPv6 UDP TX: enlarge socket buffers to 4MB macOS IPv6 UDP sockets have tiny default send buffers, causing immediate ENOBUFS on every send_to(). Set SO_SNDBUF and SO_RCVBUF to 4MB using socket2, matching what works for high-throughput IPv4. Co-Authored-By: Claude Opus 4.6 (1M context) --- src/server.rs | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/server.rs b/src/server.rs index 0f98e7d..df2e5e7 100644 --- a/src/server.rs +++ b/src/server.rs @@ -644,6 +644,14 @@ async fn run_udp_test_server( format!("0.0.0.0:{}", server_udp_port).parse().unwrap() }; let udp = UdpSocket::bind(bind_addr).await?; + + // Enlarge send/receive buffers — IPv6 on macOS has small defaults + let std_sock = udp.into_std()?; + let sock2 = socket2::Socket::from(std_sock); + let _ = sock2.set_send_buffer_size(4 * 1024 * 1024); // 4MB + let _ = sock2.set_recv_buffer_size(4 * 1024 * 1024); + let udp = UdpSocket::from_std(sock2.into())?; + let client_udp_addr = SocketAddr::new(peer.ip(), client_udp_port); // When connection_count > 1, MikroTik sends UDP from MULTIPLE source ports