Merge branch 'pr485'
This commit is contained in:
@@ -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,26 +139,17 @@ 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):
|
||||||
log.debug("Exception during socket recv for %s: %s",
|
continue
|
||||||
self, err)
|
log.debug("Exception during socket recv for %s: %s",
|
||||||
self.defunct(err)
|
self, err)
|
||||||
return # leave the read loop
|
self.defunct(err)
|
||||||
|
return # leave the read loop
|
||||||
|
|
||||||
if self._iobuf.tell():
|
if self._iobuf.tell():
|
||||||
self.process_io_buffer()
|
self.process_io_buffer()
|
||||||
|
|||||||
Reference in New Issue
Block a user