XX-net/XX-Net · warning

front retry %s%s

Error message

front retry %s%s

What it means

The selected front returned an unexpected HTTP status (anything other than 200/521/400/404, e.g. 403, 5xx, 602), so front_dispatcher sleeps 1s and retries with another front. Repeated occurrences mean fronts are systematically failing.

Source

Thrown at code/default/x_tunnel/local/front_dispatcher.py:190

        if get_front_time > 0.1:
            xlog.warn("get_front_time: %f for %s %s %s", get_front_time, method, host, path)

        if host == "dns.xx-net.org" and front == cloudflare_front and g.server_host:
            # share the x-tunnel connection with dns.xx-net.org
            # x-tunnel server will forward the request to dns.xx-net.org
            if g.server_host:
                host = g.server_host

        headers["X-Async"] = "1"
        if len(data) < 84:
            padding = utils.to_str(utils.generate_random_lowercase(random.randint(8, 64)))
            headers["Padding"] = padding

        content, status, response = front.request(
            method, host=host, path=path, headers=dict(headers), data=data, timeout=timeout)

        if status not in [200, 521, 400, 404]:
            xlog.warn("front retry %s%s", host, path)
            time.sleep(1)
            continue

        header_len = int(response.headers.get(b"Content-Length", 0))
        if header_len and len(content) != header_len:
            xlog.warn("response length incorrect, head len:%s, content len:%d retry it", header_len, len(content))
            time.sleep(1)
            continue

        return content, status, response

    return content, status, response


def set_session_host(host):
    global session_fronts
    for front in session_fronts:
        dispatcher = front.get_dispatcher(host)

View on GitHub (pinned to cfa5bc17b6)

Solutions

  1. Inspect the accompanying per-front warnings (error 220) to see the status/trace
  2. Update/rotate front domains via the front updater
  3. Verify server-side health and account quota if all fronts return 5xx
Defensive patterns

Strategy: retry

Prevention

When it happens

Trigger: front.request returns 403 (front blocked), 500/502 (worker backend error), 602 (front-level failure) — dispatcher then loops.

Common situations: CloudFront/GAE IP fronts blocked by firewall, worker quota exhausted, or upstream xx-net server erroring.

Related errors


AI-assisted analysis of XX-net/XX-Net@cfa5bc17b6 (2026-08-27). Data as JSON: /api/errors/928ecabfe15201a5. Report an issue: GitHub.