From: Ben Darnell Date: Sat, 21 Jan 2012 23:58:35 +0000 (-0800) Subject: Check if the stream is closed before writing final websocket close packet. X-Git-Tag: v2.2.0~20 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ea0291b256264deeea70a77d1add797bc5e9f121;p=thirdparty%2Ftornado.git Check if the stream is closed before writing final websocket close packet. Closes #390. --- diff --git a/tornado/websocket.py b/tornado/websocket.py index ca0096322..b5b742c8c 100644 --- a/tornado/websocket.py +++ b/tornado/websocket.py @@ -387,8 +387,9 @@ class WebSocketProtocol76(WebSocketProtocol): """Closes the WebSocket connection.""" if self.client_terminated and self._waiting: tornado.ioloop.IOLoop.instance().remove_timeout(self._waiting) + self._waiting = None self.stream.close() - else: + elif not self.stream.closed(): self.stream.write("\xff\x00") self._waiting = tornado.ioloop.IOLoop.instance().add_timeout( time.time() + 5, self._abort) @@ -603,6 +604,7 @@ class WebSocketProtocol13(WebSocketProtocol): def close(self): """Closes the WebSocket connection.""" + if self.stream.closed(): return self._write_frame(True, 0x8, b("")) self._started_closing_handshake = True self._waiting = tornado.ioloop.IOLoop.instance().add_timeout(time.time() + 5, self._abort)