Lower listen backlog to fix accept crashes

See https://github.com/Meziu/rust-horizon/pull/1
This commit is contained in:
AzureMarker 2021-12-29 17:53:55 -05:00 committed by Mark Drobnak
parent 4e808f87cc
commit be8b88f2b6
No known key found for this signature in database
GPG Key ID: 47A133F3BF9D03D3

View File

@ -398,13 +398,20 @@ impl TcpListener {
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 })
}