You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
PR #389 carries a temporary Android-only QUIC configuration workaround for #387. It disables segmentation offload before application traffic starts because the released noq UDP path can lose the first batch rejected by an Android kernel.
This issue tracks deleting that policy as soon as the upstream transport can retry a rejected batch safely. The workaround is not intended to become permanent Android networking behavior in iroh-http.
Why the workaround exists
Some Android kernels advertise UDP segmentation offload but reject a batched sendmsg at runtime with an I/O error. The currently released noq implementation disables GSO after that rejection, but it does not immediately retransmit the rejected batch as individual datagrams. The resulting packet loss can stall an HTTP request body until timeout or path fallback.
PR #389 uses iroh's public QUIC transport configuration to disable the optimization on Android only. It does not implement UDP sending, retry behavior, or platform capability detection in iroh-http. Other platforms retain the upstream default.
A merged upstream PR is not sufficient by itself. We need the fix in a released noq version, adopted by a released iroh version, followed by physical-device validation through iroh-http.
Ownership and containment
noq-udp owns the sendmsg operation and must own retrying the rejected packet batch.
iroh owns adopting the corrected noq release and carrying its transport behavior.
iroh-http owns only the temporary Android configuration policy required for release correctness.
Keep the policy private to endpoint construction; do not expose it as a public option or recreate low-level UDP retry logic.
PR #389 should not be blocked on the upstream release: correctness is required now and the workaround is one private transport policy. PR #389 must keep the workaround directly linked to this issue so it cannot silently become permanent.
Summary
PR #389 carries a temporary Android-only QUIC configuration workaround for #387. It disables segmentation offload before application traffic starts because the released noq UDP path can lose the first batch rejected by an Android kernel.
This issue tracks deleting that policy as soon as the upstream transport can retry a rejected batch safely. The workaround is not intended to become permanent Android networking behavior in iroh-http.
Why the workaround exists
Some Android kernels advertise UDP segmentation offload but reject a batched
sendmsgat runtime with an I/O error. The currently released noq implementation disables GSO after that rejection, but it does not immediately retransmit the rejected batch as individual datagrams. The resulting packet loss can stall an HTTP request body until timeout or path fallback.PR #389 uses iroh's public QUIC transport configuration to disable the optimization on Android only. It does not implement UDP sending, retry behavior, or platform capability detection in iroh-http. Other platforms retain the upstream default.
Upstream tracking
A merged upstream PR is not sufficient by itself. We need the fix in a released noq version, adopted by a released iroh version, followed by physical-device validation through iroh-http.
Ownership and containment
noq-udpowns thesendmsgoperation and must own retrying the rejected packet batch.crates/iroh-http-core/src/endpoint/bind.rs.Removal condition
Remove the workaround only after all of the following are true:
Expected deletion surface
The removal should remain deliberately small and localized to
crates/iroh-http-core/src/endpoint/bind.rs:segmentation_offload_enabled..enable_segmentation_offload(...)override so iroh's upstream default is restored on Android.transport_policy_testswhile retaining meaningful transport regressions at the integration boundary.No DNS-SD, adapter, HTTP framing, timeout, or public API changes should be necessary.
Exit criteria
Physical-device validation matrix
Relationship to PR #389
PR #389 should not be blocked on the upstream release: correctness is required now and the workaround is one private transport policy. PR #389 must keep the workaround directly linked to this issue so it cannot silently become permanent.
Blocked by n0-computer/noq#746. Follow-up to #387.