- detect socket connection state(#109)

This commit is contained in:
liris
2014-09-19 10:42:58 +09:00
parent 7318556f46
commit 35156d2da9
3 changed files with 20 additions and 2 deletions

View File

@@ -206,7 +206,8 @@ ChangeLog
- v0.19.0 - v0.19.0
-suppress close event message(#107) - suppress close event message(#107)
- detect socket connection state(#109)
- v0.18.0 - v0.18.0

View File

@@ -29,7 +29,6 @@ from websocket._core import _parse_url, _create_sec_websocket_key
# Skip test to access the internet. # Skip test to access the internet.
TEST_WITH_INTERNET = False TEST_WITH_INTERNET = False
# TEST_WITH_INTERNET = True
# Skip Secure WebSocket test. # Skip Secure WebSocket test.
TEST_SECURE_WS = False TEST_SECURE_WS = False
@@ -62,6 +61,9 @@ class SockMock(object):
self.sent.append(data) self.sent.append(data)
return len(data) return len(data)
def close(self):
pass
class HeaderSockMock(SockMock): class HeaderSockMock(SockMock):
@@ -287,6 +289,20 @@ class WebSocketTest(unittest.TestCase):
with self.assertRaises(ws.WebSocketConnectionClosedException): with self.assertRaises(ws.WebSocketConnectionClosedException):
sock.recv() sock.recv()
def testClose(self):
sock = ws.WebSocket()
sock.sock = SockMock()
sock.connected = True
sock.close()
self.assertEqual(sock.connected, False)
sock = ws.WebSocket()
s = sock.sock = SockMock()
sock.connected = True
s.add_packet(six.b('\x88\x80\x17\x98p\x84'))
sock.recv()
self.assertEqual(sock.connected, False)
def testRecvContFragmentation(self): def testRecvContFragmentation(self):
sock = ws.WebSocket() sock = ws.WebSocket()
s = sock.sock = SockMock() s = sock.sock = SockMock()

View File

@@ -787,6 +787,7 @@ class WebSocket(object):
""" """
if status < 0 or status >= ABNF.LENGTH_16: if status < 0 or status >= ABNF.LENGTH_16:
raise ValueError("code is invalid range") raise ValueError("code is invalid range")
self.connected = False
self.send(struct.pack('!H', status) + reason, ABNF.OPCODE_CLOSE) self.send(struct.pack('!H', status) + reason, ABNF.OPCODE_CLOSE)
def close(self, status=STATUS_NORMAL, reason=six.b("")): def close(self, status=STATUS_NORMAL, reason=six.b("")):