Index: twisted/web/websocket.py
===================================================================
--- twisted/web/websocket.py    (revision 28853)
+++ twisted/web/websocket.py    (working copy)
@@ -12,6 +12,7 @@
 """


+from twisted.internet.error import ConnectionDone
 from twisted.web.http import datetimeToString
 from twisted.web.server import Request, Site, version, unquote

@@ -170,9 +171,18 @@

     def __init__(self, request):
         self._request = request
-        self._request.notifyFinish().addErrback(self._connectionLost)
+        self._request.notifyFinish().addCallbacks(self._connectionLost, self._finishError)


+    def _finishError(self, failure):
+        """
+        Traps ConnectionDone (client-side disconnect) and forwards the event to
+        the L{WebSocketHandler}.
+        """
+        failure.trap(ConnectionDone)
+        self._handler.connectionLost(failure)
+
+
     def _attachHandler(self, handler):
         """
         Attach the given L{WebSocketHandler} to this transport.
