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
- Inspect the Base chain to find which direction failed
- Address the underlying failure per [732]/[733] if fallback service quality matters
- 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
- Unwrap the Base error to attribute the failure to [732] vs [733]
- Expect these during xray reload while fallback sessions are active
- Keep fallback loglevel at info or lower in production
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
- Trojan fallbacks: "path" must be empty or start with "/"
- Trojan fallbacks: please fill in a valid value for every "de
- Trojan fallbacks: invalid PROXY protocol version, "xver" onl
- connection ends
- failed to find the default "name" config
AI-assisted analysis of XTLS/Xray-core@7d214f8b09 (2026-08-15).
Data as JSON: /api/errors/f9754b62b70c7193.
Report an issue: GitHub.