Keep sessions alive through UDP churn
ci / test (push) Has been cancelled
ci / fuzz-smoke (push) Has been cancelled
ci / windows-client (push) Has been cancelled
ci / package-release (linux-x86_64, ubuntu-latest) (push) Has been cancelled
ci / package-release (macos-aarch64, macos-14) (push) Has been cancelled
ci / package-release (macos-x86_64, macos-13) (push) Has been cancelled
ci / package-release (windows-x86_64, windows-latest) (push) Has been cancelled
ci / remote-bench (push) Has been cancelled
ci / test (push) Has been cancelled
ci / fuzz-smoke (push) Has been cancelled
ci / windows-client (push) Has been cancelled
ci / package-release (linux-x86_64, ubuntu-latest) (push) Has been cancelled
ci / package-release (macos-aarch64, macos-14) (push) Has been cancelled
ci / package-release (macos-x86_64, macos-13) (push) Has been cancelled
ci / package-release (windows-x86_64, windows-latest) (push) Has been cancelled
ci / remote-bench (push) Has been cancelled
This commit is contained in:
+19
-13
@@ -1,6 +1,6 @@
|
||||
//! UDP error classification shared by Dosh clients, servers, and embedders.
|
||||
|
||||
pub fn is_transient_udp_send_error(err: &std::io::Error) -> bool {
|
||||
pub fn is_transient_udp_error(err: &std::io::Error) -> bool {
|
||||
matches!(
|
||||
err.kind(),
|
||||
std::io::ErrorKind::Interrupted
|
||||
@@ -9,6 +9,10 @@ pub fn is_transient_udp_send_error(err: &std::io::Error) -> bool {
|
||||
) || err.raw_os_error().is_some_and(is_transient_udp_os_error)
|
||||
}
|
||||
|
||||
pub fn is_transient_udp_send_error(err: &std::io::Error) -> bool {
|
||||
is_transient_udp_error(err)
|
||||
}
|
||||
|
||||
#[cfg(unix)]
|
||||
fn is_transient_udp_os_error(code: i32) -> bool {
|
||||
matches!(
|
||||
@@ -48,20 +52,22 @@ fn is_transient_udp_os_error(_code: i32) -> bool {
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::is_transient_udp_send_error;
|
||||
use super::{is_transient_udp_error, is_transient_udp_send_error};
|
||||
|
||||
#[test]
|
||||
fn classifies_portable_transient_send_errors() {
|
||||
fn classifies_portable_transient_udp_errors() {
|
||||
for kind in [
|
||||
std::io::ErrorKind::Interrupted,
|
||||
std::io::ErrorKind::TimedOut,
|
||||
std::io::ErrorKind::WouldBlock,
|
||||
] {
|
||||
assert!(is_transient_udp_send_error(&std::io::Error::from(kind)));
|
||||
let err = std::io::Error::from(kind);
|
||||
assert!(is_transient_udp_error(&err));
|
||||
assert!(is_transient_udp_send_error(&err));
|
||||
}
|
||||
assert!(!is_transient_udp_send_error(&std::io::Error::from(
|
||||
std::io::ErrorKind::PermissionDenied,
|
||||
)));
|
||||
let fatal = std::io::Error::from(std::io::ErrorKind::PermissionDenied);
|
||||
assert!(!is_transient_udp_error(&fatal));
|
||||
assert!(!is_transient_udp_send_error(&fatal));
|
||||
}
|
||||
|
||||
#[cfg(unix)]
|
||||
@@ -78,9 +84,9 @@ mod tests {
|
||||
libc::ENETUNREACH,
|
||||
libc::ETIMEDOUT,
|
||||
] {
|
||||
assert!(is_transient_udp_send_error(
|
||||
&std::io::Error::from_raw_os_error(code)
|
||||
));
|
||||
let err = std::io::Error::from_raw_os_error(code);
|
||||
assert!(is_transient_udp_error(&err));
|
||||
assert!(is_transient_udp_send_error(&err));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -90,9 +96,9 @@ mod tests {
|
||||
for code in [
|
||||
10049, 10050, 10051, 10052, 10054, 10060, 10061, 10064, 10065,
|
||||
] {
|
||||
assert!(is_transient_udp_send_error(
|
||||
&std::io::Error::from_raw_os_error(code)
|
||||
));
|
||||
let err = std::io::Error::from_raw_os_error(code);
|
||||
assert!(is_transient_udp_error(&err));
|
||||
assert!(is_transient_udp_send_error(&err));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user