Skip to content

Fix UDP DNS hang during network switching#3653

Closed
aoracux wants to merge 83 commits intoSagerNet:dev-nextfrom
aoracux:dev-next
Closed

Fix UDP DNS hang during network switching#3653
aoracux wants to merge 83 commits intoSagerNet:dev-nextfrom
aoracux:dev-next

Conversation

@aoracux
Copy link
Copy Markdown

@aoracux aoracux commented Dec 29, 2025

UDPTransport.open() held the mutex while DialContext could block during Wi‑Fi changes, so Close() waited on the same lock and timed out. Move UDP dialing outside the lock and explicitly close the active UDP connection in Close(), so shutdown completes even when dialing stalls

Zephyruso and others added 30 commits December 25, 2025 14:48
We mistakenly believed that `libresolv`'s `search` function worked correctly in NetworkExtension, but it seems only `getaddrinfo` does.

This commit changes the behavior of the `local` DNS server in NetworkExtension to prefer DHCP, falling back to `getaddrinfo` if DHCP servers are unavailable.

It's worth noting that `prefer_go` does not disable DHCP since it respects Dial Fields, but `getaddrinfo` does the opposite. The new behavior only applies to NetworkExtension, not to all scenarios (primarily command-line binaries) as it did previously.

In addition, this commit also improves the DHCP DNS server to use the same robust query logic as `local`.
We do not have the `com.apple.developer.networking.multicast` entitlement and are unable to obtain it for non-technical reasons.
@nekohasekai nekohasekai force-pushed the dev-next branch 22 times, most recently from 07c65a7 to 1befbfc Compare February 27, 2026 11:55
@nekohasekai nekohasekai force-pushed the dev-next branch 8 times, most recently from 9c63f44 to da47382 Compare March 4, 2026 16:16
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants