summaryrefslogtreecommitdiff
path: root/kazoo/protocol/connection.py
diff options
context:
space:
mode:
Diffstat (limited to 'kazoo/protocol/connection.py')
-rw-r--r--kazoo/protocol/connection.py19
1 files changed, 17 insertions, 2 deletions
diff --git a/kazoo/protocol/connection.py b/kazoo/protocol/connection.py
index b4320f2..fc3586c 100644
--- a/kazoo/protocol/connection.py
+++ b/kazoo/protocol/connection.py
@@ -6,6 +6,7 @@ import logging
import random
import select
import socket
+import ssl
import sys
import time
@@ -247,7 +248,14 @@ class ConnectionHandler(object):
# have to check wlist and xlist as we don't set any
raise self.handler.timeout_exception(
"socket time-out during read")
- chunk = self._socket.recv(remaining)
+ try:
+ chunk = self._socket.recv(remaining)
+ except ssl.SSLError as e:
+ if e.errno in (ssl.SSL_ERROR_WANT_READ,
+ ssl.SSL_ERROR_WANT_WRITE):
+ continue
+ else:
+ raise
if chunk == b'':
raise ConnectionDropped('socket connection broken')
msgparts.append(chunk)
@@ -319,7 +327,14 @@ class ConnectionHandler(object):
raise self.handler.timeout_exception("socket time-out"
" during write")
msg_slice = buffer(msg, sent)
- bytes_sent = self._socket.send(msg_slice)
+ try:
+ bytes_sent = self._socket.send(msg_slice)
+ except ssl.SSLError as e:
+ if e.errno in (ssl.SSL_ERROR_WANT_READ,
+ ssl.SSL_ERROR_WANT_WRITE):
+ continue
+ else:
+ raise
if not bytes_sent:
raise ConnectionDropped('socket connection broken')
sent += bytes_sent