summaryrefslogtreecommitdiff
path: root/eventlet/green/ssl.py
diff options
context:
space:
mode:
Diffstat (limited to 'eventlet/green/ssl.py')
-rw-r--r--eventlet/green/ssl.py35
1 files changed, 25 insertions, 10 deletions
diff --git a/eventlet/green/ssl.py b/eventlet/green/ssl.py
index 828f9bf..2e0fef6 100644
--- a/eventlet/green/ssl.py
+++ b/eventlet/green/ssl.py
@@ -191,18 +191,39 @@ class GreenSSLSocket(_original_sslsocket):
raise
def recv(self, buflen=1024, flags=0):
+ return self._base_recv(buflen, flags, into=False)
+
+ def recv_into(self, buffer, nbytes=None, flags=0):
+ # Copied verbatim from CPython
+ if buffer and nbytes is None:
+ nbytes = len(buffer)
+ elif nbytes is None:
+ nbytes = 1024
+ # end of CPython code
+
+ return self._base_recv(nbytes, flags, into=True, buffer_=buffer)
+
+ def _base_recv(self, nbytes, flags, into, buffer_=None):
+ if into:
+ plain_socket_function = socket.recv_into
+ else:
+ plain_socket_function = socket.recv
+
# *NOTE: gross, copied code from ssl.py becase it's not factored well enough to be used as-is
if self._sslobj:
if flags != 0:
raise ValueError(
- "non-zero flags not allowed in calls to recv() on %s" %
- self.__class__)
- read = self.read(buflen)
+ "non-zero flags not allowed in calls to %s() on %s" %
+ plain_socket_function.__name__, self.__class__)
+ read = self.read(nbytes, buffer_)
return read
else:
while True:
try:
- return socket.recv(self, buflen, flags)
+ args = [self, nbytes, flags]
+ if into:
+ args.insert(1, buffer_)
+ return plain_socket_function(*args)
except orig_socket.error as e:
if self.act_non_blocking:
raise
@@ -218,12 +239,6 @@ class GreenSSLSocket(_original_sslsocket):
return b''
raise
- def recv_into(self, buffer, nbytes=None, flags=0):
- if not self.act_non_blocking:
- trampoline(self, read=True, timeout=self.gettimeout(),
- timeout_exc=timeout_exc('timed out'))
- return super(GreenSSLSocket, self).recv_into(buffer, nbytes, flags)
-
def recvfrom(self, addr, buflen=1024, flags=0):
if not self.act_non_blocking:
trampoline(self, read=True, timeout=self.gettimeout(),