Another micro-optimization

Also a couple of small bug fixes for unexpected socket death
This commit is contained in:
Kovid Goyal 2015-05-26 08:16:09 +05:30
parent 3e27e0da0f
commit 40791b72b0

View File

@ -391,14 +391,19 @@ class ServerLoop(object):
writable = []
else:
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:
if e.errno in socket_errors_eintr:
return
for s, conn in tuple(self.connection_map.iteritems()):
try:
select.select([s], [], [], 0)
except select.error:
except (select.error, socket.error):
if e.errno not in socket_errors_eintr:
self.close(s, conn) # Bad socket, discard
return
@ -457,11 +462,14 @@ class ServerLoop(object):
conn.close()
def get_actions(self, readable, writable):
listener = self.socket.fileno()
for s in readable:
if s is self.socket:
s, addr = self.accept()
if s is not None:
self.connection_map[s] = conn = self.handler(s, self.opts, self.ssl_context, self.tdir)
if s == listener:
sock, addr = self.accept()
if sock is not None:
s = sock.fileno()
if s > -1:
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: