mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Handle errors in drain_ssl_buffer()
This commit is contained in:
parent
fae7613a08
commit
52949371c9
@ -271,10 +271,15 @@ class Connection(object): # {{{
|
|||||||
def drain_ssl_buffer(self):
|
def drain_ssl_buffer(self):
|
||||||
try:
|
try:
|
||||||
self.read_buffer.recv_from(self.socket)
|
self.read_buffer.recv_from(self.socket)
|
||||||
except Exception:
|
except ssl.SSLWantReadError:
|
||||||
# Ignore errors since we dont know if the SSL buffer had
|
return
|
||||||
# any data or not
|
except socket.error as e:
|
||||||
pass
|
if e.errno in socket_errors_nonblocking or e.errno in socket_errors_eintr:
|
||||||
|
return
|
||||||
|
if e.errno in socket_errors_socket_closed:
|
||||||
|
self.ready = False
|
||||||
|
return
|
||||||
|
raise
|
||||||
|
|
||||||
def close(self):
|
def close(self):
|
||||||
self.ready = False
|
self.ready = False
|
||||||
@ -493,7 +498,7 @@ class ServerLoop(object):
|
|||||||
|
|
||||||
def tick(self):
|
def tick(self):
|
||||||
now = monotonic()
|
now = monotonic()
|
||||||
read_needed, write_needed, readable, remove = [], [], [], []
|
read_needed, write_needed, readable, remove, close_needed = [], [], [], [], []
|
||||||
has_ssl = self.ssl_context is not None
|
has_ssl = self.ssl_context is not None
|
||||||
for s, conn in self.connection_map.iteritems():
|
for s, conn in self.connection_map.iteritems():
|
||||||
if now - conn.last_activity > self.opts.timeout:
|
if now - conn.last_activity > self.opts.timeout:
|
||||||
@ -511,7 +516,10 @@ class ServerLoop(object):
|
|||||||
else:
|
else:
|
||||||
if has_ssl:
|
if has_ssl:
|
||||||
conn.drain_ssl_buffer()
|
conn.drain_ssl_buffer()
|
||||||
(readable if conn.read_buffer.has_data else read_needed).append(s)
|
if conn.ready:
|
||||||
|
(readable if conn.read_buffer.has_data else read_needed).append(s)
|
||||||
|
else:
|
||||||
|
close_needed.append((s, conn))
|
||||||
else:
|
else:
|
||||||
read_needed.append(s)
|
read_needed.append(s)
|
||||||
elif wf is WRITE:
|
elif wf is WRITE:
|
||||||
@ -521,6 +529,9 @@ class ServerLoop(object):
|
|||||||
self.log('Closing connection because of extended inactivity: %s' % conn.state_description)
|
self.log('Closing connection because of extended inactivity: %s' % conn.state_description)
|
||||||
self.close(s, conn)
|
self.close(s, conn)
|
||||||
|
|
||||||
|
for x, conn in close_needed:
|
||||||
|
self.close(s, conn)
|
||||||
|
|
||||||
if readable:
|
if readable:
|
||||||
writable = []
|
writable = []
|
||||||
else:
|
else:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user