mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Another micro-optimization
Also a couple of small bug fixes for unexpected socket death
This commit is contained in:
parent
3e27e0da0f
commit
40791b72b0
@ -391,15 +391,20 @@ class ServerLoop(object):
|
|||||||
writable = []
|
writable = []
|
||||||
else:
|
else:
|
||||||
try:
|
try:
|
||||||
readable, writable, _ = select.select([self.socket] + read_needed, write_needed, [], self.opts.timeout)
|
readable, writable, _ = select.select([self.socket.fileno()] + read_needed, write_needed, [], self.opts.timeout)
|
||||||
|
except ValueError: # self.socket.fileno() == -1
|
||||||
|
self.ready = False
|
||||||
|
self.log.error('Listening socket was unexpectedly terminated')
|
||||||
|
return
|
||||||
except (select.error, socket.error) as e:
|
except (select.error, socket.error) as e:
|
||||||
if e.errno in socket_errors_eintr:
|
if e.errno in socket_errors_eintr:
|
||||||
return
|
return
|
||||||
for s, conn in tuple(self.connection_map.iteritems()):
|
for s, conn in tuple(self.connection_map.iteritems()):
|
||||||
try:
|
try:
|
||||||
select.select([s], [], [], 0)
|
select.select([s], [], [], 0)
|
||||||
except select.error:
|
except (select.error, socket.error):
|
||||||
self.close(s, conn) # Bad socket, discard
|
if e.errno not in socket_errors_eintr:
|
||||||
|
self.close(s, conn) # Bad socket, discard
|
||||||
return
|
return
|
||||||
|
|
||||||
if not self.ready:
|
if not self.ready:
|
||||||
@ -457,13 +462,16 @@ class ServerLoop(object):
|
|||||||
conn.close()
|
conn.close()
|
||||||
|
|
||||||
def get_actions(self, readable, writable):
|
def get_actions(self, readable, writable):
|
||||||
|
listener = self.socket.fileno()
|
||||||
for s in readable:
|
for s in readable:
|
||||||
if s is self.socket:
|
if s == listener:
|
||||||
s, addr = self.accept()
|
sock, addr = self.accept()
|
||||||
if s is not None:
|
if sock is not None:
|
||||||
self.connection_map[s] = conn = self.handler(s, self.opts, self.ssl_context, self.tdir)
|
s = sock.fileno()
|
||||||
if self.ssl_context is not None:
|
if s > -1:
|
||||||
yield s, conn, RDWR
|
self.connection_map[s] = conn = self.handler(sock, self.opts, self.ssl_context, self.tdir)
|
||||||
|
if self.ssl_context is not None:
|
||||||
|
yield s, conn, RDWR
|
||||||
else:
|
else:
|
||||||
yield s, self.connection_map[s], READ
|
yield s, self.connection_map[s], READ
|
||||||
for s in writable:
|
for s in writable:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user