Merge
This commit is contained in:
@@ -29,6 +29,11 @@ def format_date_time(timestamp):
|
|||||||
_weekdayname[wd], day, _monthname[month], year, hh, mm, ss
|
_weekdayname[wd], day, _monthname[month], year, hh, mm, ss
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# Collections of error codes to compare against. Not all attributes are set
|
||||||
|
# on errno module on all platforms, so some are literals :(
|
||||||
|
BAD_SOCK = set((errno.EBADF, 10053))
|
||||||
|
BROKEN_SOCK = set((errno.EPIPE, errno.ECONNRESET))
|
||||||
|
|
||||||
class Input(object):
|
class Input(object):
|
||||||
def __init__(self,
|
def __init__(self,
|
||||||
rfile,
|
rfile,
|
||||||
@@ -154,7 +159,7 @@ class HttpProtocol(BaseHTTPServer.BaseHTTPRequestHandler):
|
|||||||
except greenio.SSL.ZeroReturnError:
|
except greenio.SSL.ZeroReturnError:
|
||||||
self.raw_requestline = ''
|
self.raw_requestline = ''
|
||||||
except socket.error, e:
|
except socket.error, e:
|
||||||
if e[0] != errno.EBADF and e[0] != 10053:
|
if getattr(e, 'errno', 0) not in BAD_SOCK:
|
||||||
raise
|
raise
|
||||||
self.raw_requestline = ''
|
self.raw_requestline = ''
|
||||||
|
|
||||||
@@ -184,9 +189,7 @@ class HttpProtocol(BaseHTTPServer.BaseHTTPRequestHandler):
|
|||||||
self.handle_one_response()
|
self.handle_one_response()
|
||||||
except socket.error, e:
|
except socket.error, e:
|
||||||
# Broken pipe, connection reset by peer
|
# Broken pipe, connection reset by peer
|
||||||
if e[0] in (32, 54):
|
if getattr(e, 'errno', 0) not in BROKEN_SOCK:
|
||||||
pass
|
|
||||||
else:
|
|
||||||
raise
|
raise
|
||||||
finally:
|
finally:
|
||||||
self.server.outstanding_requests -= 1
|
self.server.outstanding_requests -= 1
|
||||||
@@ -474,7 +477,7 @@ def server(sock, site,
|
|||||||
try:
|
try:
|
||||||
client_socket = sock.accept()
|
client_socket = sock.accept()
|
||||||
except socket.error, e:
|
except socket.error, e:
|
||||||
if e[0] != errno.EPIPE and e[0] != errno.EBADF:
|
if getattr(e, 'errno', 0) not in BAD_SOCK + BROKEN_SOCK:
|
||||||
raise
|
raise
|
||||||
pool.execute_async(serv.process_request, client_socket)
|
pool.execute_async(serv.process_request, client_socket)
|
||||||
except (KeyboardInterrupt, SystemExit):
|
except (KeyboardInterrupt, SystemExit):
|
||||||
@@ -485,6 +488,6 @@ def server(sock, site,
|
|||||||
greenio.shutdown_safe(sock)
|
greenio.shutdown_safe(sock)
|
||||||
sock.close()
|
sock.close()
|
||||||
except socket.error, e:
|
except socket.error, e:
|
||||||
if e[0] != errno.EPIPE:
|
if getattr(e, 'errno', 0) not in BROKEN_SOCK:
|
||||||
traceback.print_exc()
|
traceback.print_exc()
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user