Support all "connection reset" phrases in DisconnectedClientHelper

Prior to this commit, the isClientDisconnectedException() method in
DisconnectedClientHelper checked whether the message of the ultimate
exception in an exception chain contained one of the phrases "broken
pipe" or "connection reset by peer". However, that failed to match if
the exception message contained "Connection reset", which is the case
for the SocketException thrown by throwConnectionReset() in
sun.nio.ch.SocketChannelImpl.

This commit therefore replaces the "connection reset by peer" phrase
with "connection reset" in order to support all exception messages
containing "connection reset".

Closes gh-33064
This commit is contained in:
Sam Brannen 2024-06-18 16:42:59 +02:00
parent 9a56a8877f
commit 203fa75196
1 changed files with 3 additions and 2 deletions

View File

@ -36,7 +36,7 @@ import org.springframework.util.Assert;
public class DisconnectedClientHelper {
private static final Set<String> EXCEPTION_PHRASES =
Set.of("broken pipe", "connection reset by peer");
Set.of("broken pipe", "connection reset");
private static final Set<String> EXCEPTION_TYPE_NAMES =
Set.of("AbortedException", "ClientAbortException",
@ -73,11 +73,12 @@ public class DisconnectedClientHelper {
/**
* Whether the given exception indicates the client has gone away.
* Known cases covered:
* <p>Known cases covered:
* <ul>
* <li>ClientAbortException or EOFException for Tomcat
* <li>EofException for Jetty
* <li>IOException "Broken pipe" or "connection reset by peer"
* <li>SocketException "Connection reset"
* </ul>
*/
public static boolean isClientDisconnectedException(Throwable ex) {