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.api import exc_after, TimeoutError, trampoline, get_hub
|
||||||
from eventlet import util
|
from eventlet import util
|
||||||
|
|
||||||
|
from twisted.internet.error import ConnectionDone
|
||||||
|
|
||||||
|
|
||||||
BUFFER_SIZE = 4096
|
BUFFER_SIZE = 4096
|
||||||
|
|
||||||
@@ -59,14 +61,17 @@ def higher_order_recv(recv_func):
|
|||||||
try:
|
try:
|
||||||
if end:
|
if end:
|
||||||
timeout = end - time.time()
|
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:
|
except socket.error, e:
|
||||||
if e[0] == errno.EPIPE:
|
if e[0] == errno.EPIPE:
|
||||||
bytes = ''
|
bytes = ''
|
||||||
else:
|
else:
|
||||||
raise
|
raise
|
||||||
except TimeoutError:
|
|
||||||
raise socket.timeout
|
|
||||||
else:
|
else:
|
||||||
bytes = recv_func(fd, buflen)
|
bytes = recv_func(fd, buflen)
|
||||||
self.recvcount += len(bytes)
|
self.recvcount += len(bytes)
|
||||||
|
Reference in New Issue
Block a user