{"record":{"id":"d575b0390e9c4bd4","repo":"XX-net/XX-Net","slug":"do-sock-to-s-d-x-tunnel-fail-r","errorCode":null,"errorMessage":"do_sock to %s:%d, x_tunnel fail:%r","messagePattern":"do_sock to (.+?):(.+?), x_tunnel fail:%r","errorType":"console","errorClass":null,"httpStatus":null,"severity":"error","filePath":"code/default/smart_router/local/smart_route.py","lineNumber":248,"sourceCode":"        raise RedirectHttpsFail()\n\n    xlog.debug(\"host:%s:%d redirect_https connect %s success\", host, port, remote_sock.ip)\n\n    if left_buf:\n        ssl_sock.send(left_buf)\n    sw = SocketWrap(ssl_sock, remote_sock.ip, port, host)\n    sock.recved_times = 3\n    g.pipe_socks.add_socks(sock, sw)\n\n\ndef do_socks(sock, host, port, client_address, left_buf=b\"\"):\n    if not g.x_tunnel:\n        raise XTunnelNotRunning()\n\n    try:\n        conn_id = g.x_tunnel.proxy_session.create_conn(sock, host, port, True)\n    except Exception as e:\n        xlog.warn(\"do_sock to %s:%d, x_tunnel fail:%r\", host, port, e)\n        raise XTunnelNotRunning()\n\n    if not conn_id:\n        xlog.warn(\"x_tunnel create conn fail\")\n        raise XTunnelNotRunning()\n\n    # xlog.debug(\"do_socks %r connect to %s:%d conn_id:%d\", client_address, host, port, conn_id)\n    if left_buf:\n        g.x_tunnel.global_var.session.conn_list[conn_id].transfer_received_data(left_buf)\n    g.x_tunnel.global_var.session.conn_list[conn_id].start(block=True)\n\n\ndef do_unwrap_socks(sock, host, port, client_address, req, left_buf=b\"\"):\n    if not g.x_tunnel:\n        return\n\n    try:\n        remote_sock = socks.create_connection(","sourceCodeStart":230,"sourceCodeEnd":266,"githubUrl":"https://github.com/XX-net/XX-Net/blob/cfa5bc17b67676e467f37ec50766127e0ab5f0aa/code/default/smart_router/local/smart_route.py#L230-L266","documentation":"Creating a connection through the x_tunnel proxy session raised an exception; do_socks logs host/port and re-raises XTunnelNotRunning so the router can fall back to another rule.","triggerScenarios":"Calling g.x_tunnel.proxy_session.create_conn(sock, host, port, True) when the x-tunnel session is broken, not yet established, or its transport threw (e.g. closed control channel, TLS failure).","commonSituations":"x-tunnel server unreachable, login/session expired, x_tunnel not fully initialized before routing, transient network outage.","solutions":["Verify x_tunnel is logged in and its control session is alive before routing traffic to it","Check x-tunnel server address/credentials and connectivity","Let try_loop fall back to the next rule (built-in behavior) and fix the underlying x-tunnel session","Restart or re-login the x-tunnel client if the session is stale"],"exampleFix":null,"handlingStrategy":"fallback","validationCode":"if not g.x_tunnel or not g.x_tunnel.proxy_session.ready(): use_next_rule()","typeGuard":"def x_tunnel_ready(): return bool(g.x_tunnel and g.x_tunnel.proxy_session)","tryCatchPattern":"Catch XTunnelNotRunning and advance to the next routing rule.","preventionTips":["Ensure x-tunnel login completes before routing traffic","Monitor x-tunnel session health"],"tags":["x-tunnel","proxy","connection","fallback"],"backgroundTag":"proxy-session-unavailable","analyzedSha":"cfa5bc17b67676e467f37ec50766127e0ab5f0aa","analyzedAt":"2026-08-27T19:28:28.225Z","schemaVersion":2},"datasetVersion":"2026-08-28T00:17:15.603Z"}