From d870c751fa28cb7a6d3f7b509d9c928705e93a8a Mon Sep 17 00:00:00 2001 From: Miha Zupan Date: Mon, 7 Sep 2026 19:31:39 +0200 Subject: [PATCH 1/2] Retry peer-reset timeouts in socket disposal tests on BSD/Apple --- .../tests/FunctionalTests/SendReceive/SendReceive.cs | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/libraries/System.Net.Sockets/tests/FunctionalTests/SendReceive/SendReceive.cs b/src/libraries/System.Net.Sockets/tests/FunctionalTests/SendReceive/SendReceive.cs index b40047ff515d58..d08e3897d7f652 100644 --- a/src/libraries/System.Net.Sockets/tests/FunctionalTests/SendReceive/SendReceive.cs +++ b/src/libraries/System.Net.Sockets/tests/FunctionalTests/SendReceive/SendReceive.cs @@ -1059,6 +1059,7 @@ await RetryHelper.ExecuteAsync(async () => (Socket socket1, Socket socket2) = SocketTestExtensions.CreateConnectedSocketPair(ipv6Server, dualModeClient); using SafeSocketHandle? owner = ReplaceWithNonOwning(ref socket1, owning); + using (socket1) using (socket2) { Task socketOperation; @@ -1138,6 +1139,14 @@ await socketOperation peerSocketError = se.SocketErrorCode; break; } + catch (TimeoutException) when (!receiveOrSend && (PlatformDetection.IsApplePlatform || PlatformDetection.IsFreeBSD)) + { + // BSD TCP stacks may reject a valid reset when sent data has not yet + // been acknowledged. Retry with fresh sockets, not another receive. + const string Message = "Timed out waiting for the peer to observe the connection reset, retry."; + _output?.WriteLine(Message); + Assert.Fail(Message); + } } try From 87c10f2096d2fa239c28987dd8b966d38ba605a2 Mon Sep 17 00:00:00 2001 From: Miha Zupan Date: Mon, 7 Sep 2026 19:47:15 +0200 Subject: [PATCH 2/2] Enhance error handling for TimeoutException Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --- .../tests/FunctionalTests/SendReceive/SendReceive.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/libraries/System.Net.Sockets/tests/FunctionalTests/SendReceive/SendReceive.cs b/src/libraries/System.Net.Sockets/tests/FunctionalTests/SendReceive/SendReceive.cs index d08e3897d7f652..c320b753a8908b 100644 --- a/src/libraries/System.Net.Sockets/tests/FunctionalTests/SendReceive/SendReceive.cs +++ b/src/libraries/System.Net.Sockets/tests/FunctionalTests/SendReceive/SendReceive.cs @@ -1139,12 +1139,13 @@ await socketOperation peerSocketError = se.SocketErrorCode; break; } - catch (TimeoutException) when (!receiveOrSend && (PlatformDetection.IsApplePlatform || PlatformDetection.IsFreeBSD)) + catch (TimeoutException ex) when (!receiveOrSend && (PlatformDetection.IsApplePlatform || PlatformDetection.IsFreeBSD)) { // BSD TCP stacks may reject a valid reset when sent data has not yet // been acknowledged. Retry with fresh sockets, not another receive. const string Message = "Timed out waiting for the peer to observe the connection reset, retry."; _output?.WriteLine(Message); + _output?.WriteLine(ex.ToString()); Assert.Fail(Message); } }