Author: markt Date: Wed Oct 16 11:16:52 2013 New Revision: 1532722 URL: http://svn.apache.org/r1532722 Log: Don't call the onError() method of the endpoint if the WebSocket close message cannot be sent for abnormal closure as this is not unexpected.
Modified: tomcat/trunk/java/org/apache/tomcat/websocket/WsSession.java Modified: tomcat/trunk/java/org/apache/tomcat/websocket/WsSession.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/WsSession.java?rev=1532722&r1=1532721&r2=1532722&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/tomcat/websocket/WsSession.java (original) +++ tomcat/trunk/java/org/apache/tomcat/websocket/WsSession.java Wed Oct 16 11:16:52 2013 @@ -30,6 +30,7 @@ import java.util.concurrent.ConcurrentHa import java.util.concurrent.atomic.AtomicLong; import javax.websocket.CloseReason; +import javax.websocket.CloseReason.CloseCode; import javax.websocket.CloseReason.CloseCodes; import javax.websocket.DeploymentException; import javax.websocket.Endpoint; @@ -463,7 +464,8 @@ public class WsSession implements Sessio private void sendCloseMessage(CloseReason closeReason) { // 125 is maximum size for the payload of a control message ByteBuffer msg = ByteBuffer.allocate(125); - msg.putShort((short) closeReason.getCloseCode().getCode()); + CloseCode closeCode = closeReason.getCloseCode(); + msg.putShort((short) closeCode.getCode()); String reason = closeReason.getReasonPhrase(); if (reason != null && reason.length() > 0) { @@ -480,7 +482,13 @@ public class WsSession implements Sessio log.debug(sm.getString("wsSession.sendCloseFail"), ioe); } wsRemoteEndpoint.close(); - localEndpoint.onError(this, ioe); + // Failure to send a close message is not unexpected in the case of + // an abnormal closure (usually triggered by a failure to read/write + // from/to the client. In this case do not trigger the endpoint's + // error handling + if (closeCode != CloseCodes.CLOSED_ABNORMALLY) { + localEndpoint.onError(this, ioe); + } } finally { webSocketContainer.unregisterSession(localEndpoint, this); } --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org