Merge branch 'pr485'

This commit is contained in:
Adam Holmberg
2016-02-24 12:06:04 -06:00

View File

@@ -18,9 +18,9 @@
from errno import EALREADY, EINPROGRESS, EWOULDBLOCK, EINVAL from errno import EALREADY, EINPROGRESS, EWOULDBLOCK, EINVAL
import eventlet import eventlet
from eventlet.green import select, socket from eventlet.green import socket
import ssl
from eventlet.queue import Queue from eventlet.queue import Queue
from functools import partial
import logging import logging
import os import os
from threading import Event from threading import Event
@@ -37,7 +37,8 @@ log = logging.getLogger(__name__)
def is_timeout(err): def is_timeout(err):
return ( return (
err in (EINPROGRESS, EALREADY, EWOULDBLOCK) or err in (EINPROGRESS, EALREADY, EWOULDBLOCK) or
(err == EINVAL and os.name in ('nt', 'ce')) (err == EINVAL and os.name in ('nt', 'ce')) or
(isinstance(err, ssl.SSLError) and err.args[0] == 'timed out')
) )
@@ -138,22 +139,13 @@ class EventletConnection(Connection):
return # Leave the write loop return # Leave the write loop
def handle_read(self): def handle_read(self):
run_select = partial(select.select, (self._socket,), (), ())
while True: while True:
try:
run_select()
except Exception as exc:
if not self.is_closed:
log.debug("Exception during read select() for %s: %s",
self, exc)
self.defunct(exc)
return
try: try:
buf = self._socket.recv(self.in_buffer_size) buf = self._socket.recv(self.in_buffer_size)
self._iobuf.write(buf) self._iobuf.write(buf)
except socket.error as err: except socket.error as err:
if not is_timeout(err): if is_timeout(err):
continue
log.debug("Exception during socket recv for %s: %s", log.debug("Exception during socket recv for %s: %s",
self, err) self, err)
self.defunct(err) self.defunct(err)