summaryrefslogtreecommitdiff
path: root/websocket/_core.py
diff options
context:
space:
mode:
Diffstat (limited to 'websocket/_core.py')
-rw-r--r--websocket/_core.py22
1 files changed, 14 insertions, 8 deletions
diff --git a/websocket/_core.py b/websocket/_core.py
index 04d909d..aea16e6 100644
--- a/websocket/_core.py
+++ b/websocket/_core.py
@@ -24,6 +24,7 @@ from __future__ import print_function
import socket
import struct
import threading
+import time
import six
@@ -398,14 +399,19 @@ class WebSocket(object):
reason, ABNF.OPCODE_CLOSE)
sock_timeout = self.sock.gettimeout()
self.sock.settimeout(timeout)
- try:
- frame = self.recv_frame()
- if isEnabledForError():
- recv_status = struct.unpack("!H", frame.data[0:2])[0]
- if recv_status != STATUS_NORMAL:
- error("close status: " + repr(recv_status))
- except:
- pass
+ start_time = time.time()
+ while timeout is None or time.time() - start_time < timeout:
+ try:
+ frame = self.recv_frame()
+ if frame.opcode != ABNF.OPCODE_CLOSE:
+ continue
+ if isEnabledForError():
+ recv_status = struct.unpack("!H", frame.data[0:2])[0]
+ if recv_status != STATUS_NORMAL:
+ error("close status: " + repr(recv_status))
+ break
+ except:
+ break
self.sock.settimeout(sock_timeout)
self.sock.shutdown(socket.SHUT_RDWR)
except: