GreenSocket.recv: return '' on ConnectionDone (twistedreactor only)
This commit is contained in:
@@ -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)
|
||||
|
Reference in New Issue
Block a user