XTLS/Xray-core · info

fallback ends

Error message

fallback ends

What it means

Aggregate wrapper returned when either fallback pipe ([732] or [733]) failed inside task.Run; both fallback-direction readers/writers are interrupted for cleanup. It marks fallback termination, logged AtInfo.

Source

Thrown at proxy/trojan/server.go:545

			return errors.New("failed to fallback request payload").Base(err).AtInfo()
		}
		return nil
	}

	writer := buf.NewWriter(connection)

	getResponse := func() error {
		defer timer.SetTimeout(sessionPolicy.Timeouts.UplinkOnly)
		if err := buf.Copy(serverReader, writer, buf.UpdateActivity(timer)); err != nil {
			return errors.New("failed to deliver response payload").Base(err).AtInfo()
		}
		return nil
	}

	if err := task.Run(ctx, task.OnSuccess(postRequest, task.Close(serverWriter)), task.OnSuccess(getResponse, task.Close(writer))); err != nil {
		common.Must(common.Interrupt(serverReader))
		common.Must(common.Interrupt(serverWriter))
		return errors.New("fallback ends").Base(err).AtInfo()
	}

	return nil
}

View on GitHub (pinned to 7d214f8b09)

Solutions

  1. Inspect the Base chain to find which direction failed
  2. Address the underlying failure per [732]/[733] if fallback service quality matters
  3. Otherwise treat as log noise and lower loglevel if too chatty
Defensive patterns

Strategy: try-catch

Try / catch

if err := task.Run(ctx, task.OnSuccess(postRequest, task.Close(serverWriter)), task.OnSuccess(getResponse, task.Close(writer))); err != nil {
    common.Must(common.Interrupt(serverReader))
    common.Must(common.Interrupt(serverWriter))
    return errors.New("fallback ends").Base(err).AtInfo()
}

Prevention

When it happens

Trigger: Any request-payload or response-payload failure during the fallback relay, or context cancellation from the idle timer after the client went silent.

Common situations: Routine fallback teardown after probers disconnect; transient backend failures.

Related errors


AI-assisted analysis of XTLS/Xray-core@7d214f8b09 (2026-08-15). Data as JSON: /api/errors/f9754b62b70c7193. Report an issue: GitHub.