From be8b88f2b6929a09e0f147cd1fa027298f19cc5b Mon Sep 17 00:00:00 2001 From: AzureMarker Date: Wed, 29 Dec 2021 17:53:55 -0500 Subject: [PATCH] Lower listen backlog to fix accept crashes See https://github.com/Meziu/rust-horizon/pull/1 --- library/std/src/sys_common/net.rs | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/library/std/src/sys_common/net.rs b/library/std/src/sys_common/net.rs index 7498e61d3d0..f5730a2cea5 100644 --- a/library/std/src/sys_common/net.rs +++ b/library/std/src/sys_common/net.rs @@ -398,13 +398,20 @@ pub fn bind(addr: io::Result<&SocketAddr>) -> io::Result { let (addrp, len) = addr.into_inner(); cvt(unsafe { c::bind(sock.as_raw(), addrp, len as _) })?; - // Start listening - #[cfg(not(target_os = "horizon"))] - cvt(unsafe { c::listen(sock.as_raw(), 128) })?; - // 40 is the maximum for Horizon OS - #[cfg(target_os = "horizon")] - cvt(unsafe { c::listen(sock.as_raw(), 40) })?; + cfg_if::cfg_if! { + if #[cfg(target_os = "horizon")] { + // The 3DS doesn't support a big connection backlog. Sometimes + // it allows up to about 37, but other times it doesn't even + // accept 32. There may be a global limitation causing this. + let backlog = 20; + } else { + // The default for all other platforms + let backlog = 128; + } + } + // Start listening + cvt(unsafe { c::listen(sock.as_raw(), backlog) })?; Ok(TcpListener { inner: sock }) } -- GitLab