You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2012/12/19 23:23:50 UTC

svn commit: r1424175 - /tomcat/trunk/java/org/apache/tomcat/websocket/WsProtocolHandler.java

Author: markt
Date: Wed Dec 19 22:23:50 2012
New Revision: 1424175

URL: http://svn.apache.org/viewvc?rev=1424175&view=rev
Log:
If the client drops the connection, tell the server the connection is closed.

Modified:
    tomcat/trunk/java/org/apache/tomcat/websocket/WsProtocolHandler.java

Modified: tomcat/trunk/java/org/apache/tomcat/websocket/WsProtocolHandler.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/WsProtocolHandler.java?rev=1424175&r1=1424174&r2=1424175&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/websocket/WsProtocolHandler.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/websocket/WsProtocolHandler.java Wed Dec 19 22:23:50 2012
@@ -16,6 +16,7 @@
  */
 package org.apache.tomcat.websocket;
 
+import java.io.EOFException;
 import java.io.IOException;
 
 import javax.servlet.ReadListener;
@@ -24,6 +25,8 @@ import javax.servlet.ServletOutputStream
 import javax.servlet.WriteListener;
 import javax.servlet.http.ProtocolHandler;
 import javax.servlet.http.WebConnection;
+import javax.websocket.CloseReason;
+import javax.websocket.CloseReason.CloseCodes;
 import javax.websocket.Endpoint;
 
 /**
@@ -54,7 +57,7 @@ public class WsProtocolHandler implement
             throw new IllegalStateException(e);
         }
         WsFrame wsFrame = new WsFrame(sis, wsSession);
-        sis.setReadListener(new WsReadListener(this, wsFrame));
+        sis.setReadListener(new WsReadListener(this, wsFrame, wsSession));
         WsRemoteEndpoint wsRemoteEndpoint = new WsRemoteEndpoint(sos);
         wsSession.setRemote(wsRemoteEndpoint);
         sos.setWriteListener(new WsWriteListener(this, wsRemoteEndpoint));
@@ -87,12 +90,14 @@ public class WsProtocolHandler implement
 
         private final WsProtocolHandler wsProtocolHandler;
         private final WsFrame wsFrame;
+        private final WsSession wsSession;
 
 
         private WsReadListener(WsProtocolHandler wsProtocolHandler,
-                WsFrame wsFrame) {
+                WsFrame wsFrame, WsSession wsSession) {
             this.wsProtocolHandler = wsProtocolHandler;
             this.wsFrame = wsFrame;
+            this.wsSession = wsSession;
         }
 
 
@@ -101,7 +106,16 @@ public class WsProtocolHandler implement
             try {
                 wsFrame.onDataAvailable();
             } catch (IOException e) {
-                onError(e);
+                if (e instanceof EOFException){
+                    try {
+                        wsSession.close(new CloseReason(
+                                CloseCodes.CLOSED_ABNORMALLY, e.getMessage()));
+                    } catch (IOException e1) {
+                        // TODO
+                    }
+                } else {
+                    onError(e);
+                }
             }
         }
 



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org