diff options
author | liris <liris.pp@gmail.com> | 2019-02-23 14:18:37 +0900 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-02-23 14:18:37 +0900 |
commit | d7c28d90ab94a400181924a586e3833ce9e1b990 (patch) | |
tree | b73a04e4cf24db1ea6420d09cce0fecbfb9f4e05 /websocket | |
parent | 53de7b00ab8c85dcc6111313913dc4adb2eb7952 (diff) | |
parent | 9a146e32e153fa1e0111b216f32c4b0e35ec9c12 (diff) | |
download | websocket-client-d7c28d90ab94a400181924a586e3833ce9e1b990.tar.gz |
Merge pull request #528 from trygveaa/fix-interrupted-system-call
Diffstat (limited to 'websocket')
-rw-r--r-- | websocket/_http.py | 38 |
1 files changed, 22 insertions, 16 deletions
diff --git a/websocket/_http.py b/websocket/_http.py index c789bb8..5b9a26d 100644 --- a/websocket/_http.py +++ b/websocket/_http.py @@ -166,26 +166,32 @@ def _open_socket(addrinfo_list, sockopt, timeout): sock.setsockopt(*opts) address = addrinfo[4] - try: - sock.connect(address) - err = None - except ProxyConnectionError as error: - err = WebSocketProxyException(str(error)) - err.remote_ip = str(address[0]) - continue - except socket.error as error: - error.remote_ip = str(address[0]) + err = None + while not err: try: - eConnRefused = (errno.ECONNREFUSED, errno.WSAECONNREFUSED) - except: - eConnRefused = (errno.ECONNREFUSED, ) - if error.errno in eConnRefused: - err = error + sock.connect(address) + except ProxyConnectionError as error: + err = WebSocketProxyException(str(error)) + err.remote_ip = str(address[0]) continue + except socket.error as error: + error.remote_ip = str(address[0]) + try: + eConnRefused = (errno.ECONNREFUSED, errno.WSAECONNREFUSED) + except: + eConnRefused = (errno.ECONNREFUSED, ) + if error.errno == errno.EINTR: + continue + elif error.errno in eConnRefused: + err = error + continue + else: + raise error else: - raise error + break else: - break + continue + break else: if err: raise err |