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