添加了对 errno 88 (Socket operation on non-socket)的处理

This commit is contained in:
CakeCN
2026-01-07 18:52:17 +08:00
parent 9231c14013
commit f818d84208

View File

@@ -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