添加了对 errno 88 (Socket operation on non-socket)的处理
This commit is contained in:
@@ -48,17 +48,47 @@ try:
|
|||||||
# 同样处理 greenio 模块的错误
|
# 同样处理 greenio 模块的错误
|
||||||
from eventlet import greenio
|
from eventlet import greenio
|
||||||
original_recv_loop = greenio.base.GreenSocket._recv_loop
|
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):
|
def custom_recv_loop(self, recv_func, recv_args, *args, **kwargs):
|
||||||
try:
|
try:
|
||||||
return original_recv_loop(self, recv_func, recv_args, *args, **kwargs)
|
return original_recv_loop(self, recv_func, recv_args, *args, **kwargs)
|
||||||
except (hubs.IOClosed, EOFError, OSError) as e:
|
except (hubs.IOClosed, EOFError, OSError) as e:
|
||||||
# 优雅处理 IO 错误
|
# 优雅处理 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''
|
return b''
|
||||||
raise
|
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_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:
|
except Exception as e:
|
||||||
# 如果修改失败,忽略错误
|
# 如果修改失败,忽略错误
|
||||||
pass
|
pass
|
||||||
|
|||||||
Reference in New Issue
Block a user