Skip to content

Commit

Permalink
do not close a socket that is already closed
Browse files Browse the repository at this point in the history
  • Loading branch information
miguelgrinberg committed Sep 4, 2016
1 parent f5dd6b2 commit ef20ffc
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 6 deletions.
13 changes: 7 additions & 6 deletions engineio/socket.py
Original file line number Diff line number Diff line change
Expand Up @@ -98,12 +98,13 @@ def handle_post_request(self, environ):

def close(self, wait=True, abort=False):
"""Close the socket connection."""
self.server._trigger_event('disconnect', self.sid, async=False)
if not abort:
self.send(packet.Packet(packet.CLOSE))
self.closed = True
if wait:
self.queue.join()
if not self.closed:
self.server._trigger_event('disconnect', self.sid, async=False)
if not abort:
self.send(packet.Packet(packet.CLOSE))
self.closed = True
if wait:
self.queue.join()

def _upgrade_websocket(self, environ, start_response):
"""Upgrade the connection from polling to websocket."""
Expand Down
11 changes: 11 additions & 0 deletions tests/test_socket.py
Original file line number Diff line number Diff line change
Expand Up @@ -356,6 +356,17 @@ def test_send_after_close(self):
s.close(wait=False)
self.assertRaises(IOError, s.send, packet.Packet(packet.NOOP))

def test_close_after_close(self):
mock_server = self._get_mock_server()
s = socket.Socket(mock_server, 'sid')
s.close(wait=False)
self.assertTrue(s.closed)
self.assertEqual(mock_server._trigger_event.call_count, 1)
mock_server._trigger_event.assert_called_once_with('disconnect', 'sid',
async=False)
s.close()
self.assertEqual(mock_server._trigger_event.call_count, 1)

def test_close_and_wait(self):
mock_server = self._get_mock_server()
s = socket.Socket(mock_server, 'sid')
Expand Down

0 comments on commit ef20ffc

Please sign in to comment.