From 50d7684c67711ffe02b3a0e1fcef152bb7139c04 Mon Sep 17 00:00:00 2001 From: Denis Bilenko Date: Tue, 7 Oct 2008 17:14:35 +0700 Subject: [PATCH] GreenSocket.recv: return '' on ConnectionDone (twistedreactor only) --- eventlet/greenio.py | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/eventlet/greenio.py b/eventlet/greenio.py index 5498d3c..207d852 100644 --- a/eventlet/greenio.py +++ b/eventlet/greenio.py @@ -25,6 +25,8 @@ THE SOFTWARE. from eventlet.api import exc_after, TimeoutError, trampoline, get_hub from eventlet import util +from twisted.internet.error import ConnectionDone + BUFFER_SIZE = 4096 @@ -59,14 +61,17 @@ def higher_order_recv(recv_func): try: if end: timeout = end - time.time() - trampoline(fd, read=True, timeout=timeout) + trampoline(fd, read=True, timeout=timeout, timeout_exc=socket.timeout) + except socket.timeout: + raise + except ConnectionDone: + #sys.stderr.write('ConnectionDone in recv -> returning empty string\n') + return '' except socket.error, e: if e[0] == errno.EPIPE: bytes = '' else: raise - except TimeoutError: - raise socket.timeout else: bytes = recv_func(fd, buflen) self.recvcount += len(bytes)