From f818d84208fdc61d188888f9d71c2f0c94792531 Mon Sep 17 00:00:00 2001 From: CakeCN Date: Wed, 7 Jan 2026 18:52:17 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=BA=86=E5=AF=B9=20errno=20?= =?UTF-8?q?88=20=EF=BC=88Socket=20operation=20on=20non-socket=EF=BC=89?= =?UTF-8?q?=E7=9A=84=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- code-server-like/app/__init__.py | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/code-server-like/app/__init__.py b/code-server-like/app/__init__.py index 07f1d8a..0d12ba0 100644 --- a/code-server-like/app/__init__.py +++ b/code-server-like/app/__init__.py @@ -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