Close WebSockets "harshly" if a close frame write fails

This commit is contained in:
Jon Chambers 2024-11-08 12:22:15 -05:00 committed by Jon Chambers
parent 767f6a90e0
commit e53a9f3f1a
2 changed files with 12 additions and 21 deletions

View File

@ -508,13 +508,7 @@ public class WebSocketConnection implements ClientEventListener {
message = "OK";
}
try {
client.close(code, message);
} catch (final Exception e) {
logger.warn("Orderly close failed", e);
client.hardDisconnectQuietly();
}
client.close(code, message);
}
private record StoredMessageInfo(UUID guid, long serverTimestamp) {

View File

@ -62,9 +62,6 @@ public class WebSocketClient {
pendingRequestMapper.remove(requestId);
future.completeExceptionally(x);
}
@Override
public void writeSuccess() {}
});
} catch (WebSocketException e) {
logger.debug("Write", e);
@ -87,8 +84,17 @@ public class WebSocketClient {
return session.isOpen();
}
public void close(int code, String message) {
session.close(code, message);
public void close(final int code, final String message) {
session.close(code, message, new WriteCallback() {
@Override
public void writeFailed(final Throwable throwable) {
try {
session.disconnect();
} catch (final Exception e) {
logger.warn("Failed to disconnect session", e);
}
}
});
}
public boolean shouldDeliverStories() {
@ -96,16 +102,7 @@ public class WebSocketClient {
return Stories.parseReceiveStoriesHeader(value);
}
public void hardDisconnectQuietly() {
try {
session.disconnect();
} catch (Exception e) {
// quietly we said
}
}
private long generateRequestId() {
return Math.abs(SECURE_RANDOM.nextLong());
}
}