添加了对 errno 88 (Socket operation on non-socket)的处理
This commit is contained in:
@@ -48,17 +48,47 @@ try:
|
||||
# 同样处理 greenio 模块的错误
|
||||
from eventlet import greenio
|
||||
original_recv_loop = greenio.base.GreenSocket._recv_loop
|
||||
original_recv_into = greenio.base.GreenSocket.recv_into
|
||||
|
||||
def custom_recv_loop(self, recv_func, recv_args, *args, **kwargs):
|
||||
try:
|
||||
return original_recv_loop(self, recv_func, recv_args, *args, **kwargs)
|
||||
except (hubs.IOClosed, EOFError, OSError) as e:
|
||||
# 优雅处理 IO 错误
|
||||
if hasattr(e, 'errno') and e.errno in (9, 107): # Bad file descriptor or Operation on closed file
|
||||
if hasattr(e, 'errno') and e.errno in (9, 88, 107): # Bad file descriptor, Socket operation on non-socket, Operation on closed file
|
||||
return b''
|
||||
raise
|
||||
|
||||
def custom_recv_into(self, buffer, nbytes=0, flags=0):
|
||||
try:
|
||||
return original_recv_into(self, buffer, nbytes, flags)
|
||||
except OSError as e:
|
||||
if hasattr(e, 'errno') and e.errno in (9, 88, 107): # Bad file descriptor, Socket operation on non-socket, Operation on closed file
|
||||
return 0
|
||||
raise
|
||||
|
||||
greenio.base.GreenSocket._recv_loop = custom_recv_loop
|
||||
greenio.base.GreenSocket.recv_into = custom_recv_into
|
||||
|
||||
# 处理 WSGI 中的 readline 错误
|
||||
try:
|
||||
import eventlet.wsgi
|
||||
original_wsgi_handle_one_request = eventlet.wsgi.HttpProtocol.handle_one_request
|
||||
|
||||
def custom_wsgi_handle_one_request(self):
|
||||
try:
|
||||
return original_wsgi_handle_one_request(self)
|
||||
except OSError as e:
|
||||
if hasattr(e, 'errno') and e.errno in (9, 88, 107): # Bad file descriptor, Socket operation on non-socket, Operation on closed file
|
||||
# 清理连接状态
|
||||
self.finish()
|
||||
return
|
||||
raise
|
||||
|
||||
eventlet.wsgi.HttpProtocol.handle_one_request = custom_wsgi_handle_one_request
|
||||
except Exception as e:
|
||||
# 如果修改失败,忽略错误
|
||||
pass
|
||||
except Exception as e:
|
||||
# 如果修改失败,忽略错误
|
||||
pass
|
||||
|
||||
Reference in New Issue
Block a user