diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/dto/V2rayConfig.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/dto/V2rayConfig.kt index 80db57f7..c158362e 100644 --- a/V2rayNG/app/src/main/java/com/v2ray/ang/dto/V2rayConfig.kt +++ b/V2rayNG/app/src/main/java/com/v2ray/ang/dto/V2rayConfig.kt @@ -245,7 +245,14 @@ data class V2rayConfig( var tproxy: String? = null, var mark: Int? = null, var dialerProxy: String? = null, - var domainStrategy: String? = null + var domainStrategy: String? = null, + var happyEyeballs: happyEyeballsBean? = null, + ) + data class happyEyeballsBean( + var prioritizeIPv6: Boolean? = null, + var maxConcurrentTry: Int? = 4, + var tryDelayMs: Int? = 250, // ms + var interleave: Int? = null, ) data class TlsSettingsBean( diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/handler/V2rayConfigManager.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/handler/V2rayConfigManager.kt index 663907f0..4c52ed70 100644 --- a/V2rayNG/app/src/main/java/com/v2ray/ang/handler/V2rayConfigManager.kt +++ b/V2rayNG/app/src/main/java/com/v2ray/ang/handler/V2rayConfigManager.kt @@ -1011,14 +1011,22 @@ object V2rayConfigManager { if (domain.isNullOrEmpty()) continue if (newHosts.containsKey(domain)) { - item.ensureSockopt().domainStrategy = if (preferIpv6) "UseIPv6v4" else "UseIPv4v6" + item.ensureSockopt().domainStrategy = "UseIP" + item.ensureSockopt().happyEyeballs = StreamSettingsBean.happyEyeballsBean( + prioritizeIPv6 = preferIpv6, + interleave = 2 + ) continue } val resolvedIps = HttpUtil.resolveHostToIP(domain, preferIpv6) if (resolvedIps.isNullOrEmpty()) continue - item.ensureSockopt().domainStrategy = if (preferIpv6) "UseIPv6v4" else "UseIPv4v6" + item.ensureSockopt().domainStrategy = "UseIP" + item.ensureSockopt().happyEyeballs = StreamSettingsBean.happyEyeballsBean( + prioritizeIPv6 = preferIpv6, + interleave = 2 + ) newHosts[domain] = if (resolvedIps.size == 1) { resolvedIps[0] } else {