GreenSocket.recv: return '' on ConnectionDone (twistedreactor only)

This commit is contained in:
Denis Bilenko
2008-10-07 17:14:35 +07:00
parent 4cbaeeab63
commit 50d7684c67

View File

@@ -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)