generalized read loop in favor of ssl-only 'drain'

tweaking gevent ssl PR WIP
This commit is contained in:
Adam Holmberg
2014-11-24 12:34:55 -06:00
parent 6e1154d6d5
commit 7488ec065a
2 changed files with 5 additions and 12 deletions

View File

@@ -79,9 +79,6 @@ class GeventConnection(Connection):
self._socket = socket.socket(af, socktype, proto) self._socket = socket.socket(af, socktype, proto)
if self.ssl_options: if self.ssl_options:
self._socket = ssl.wrap_socket(self._socket, **self.ssl_options) self._socket = ssl.wrap_socket(self._socket, **self.ssl_options)
self._ssl_socket = True
else:
self._ssl_socket = False
self._socket.settimeout(1.0) self._socket.settimeout(1.0)
self._socket.connect(sockaddr) self._socket.connect(sockaddr)
sockerr = None sockerr = None
@@ -155,15 +152,11 @@ class GeventConnection(Connection):
return return
try: try:
buf = self._socket.recv(self.in_buffer_size) while True:
self._iobuf.write(buf) buf = self._socket.recv(self.in_buffer_size)
if self._ssl_socket: self._iobuf.write(buf)
# We need to drain pending data when dealing with a SSL socket if len(buf) < self.in_buffer_size:
data_left = self._socket.pending() break
while data_left:
buf = self._socket.recv(data_left)
self._iobuf.write(buf)
data_left = self._socket.pending()
except socket.error as err: except socket.error as err:
if not is_timeout(err): if not is_timeout(err):
log.debug("Exception during socket recv for %s: %s", self, err) log.debug("Exception during socket recv for %s: %s", self, err)

BIN
cassandra/io/libevwrapper.sox Executable file

Binary file not shown.