diff --git a/core/src/main/java/com/github/kr328/clash/core/Clash.kt b/core/src/main/java/com/github/kr328/clash/core/Clash.kt index a58dc41f..a3be5fa5 100644 --- a/core/src/main/java/com/github/kr328/clash/core/Clash.kt +++ b/core/src/main/java/com/github/kr328/clash/core/Clash.kt @@ -49,7 +49,7 @@ object Clash { } fun notifyDnsChanged(dns: List) { - Bridge.nativeNotifyDnsChanged(dns.joinToString(separator = ",")) + Bridge.nativeNotifyDnsChanged(dns.toSet().joinToString(separator = ",")) } fun notifyTimeZoneChanged(name: String, offset: Int) { diff --git a/service/src/main/java/com/github/kr328/clash/service/clash/module/NetworkObserveModule.kt b/service/src/main/java/com/github/kr328/clash/service/clash/module/NetworkObserveModule.kt index 837f0b3b..b7132153 100644 --- a/service/src/main/java/com/github/kr328/clash/service/clash/module/NetworkObserveModule.kt +++ b/service/src/main/java/com/github/kr328/clash/service/clash/module/NetworkObserveModule.kt @@ -6,7 +6,7 @@ import android.os.Build import androidx.core.content.getSystemService import com.github.kr328.clash.common.log.Log import com.github.kr328.clash.core.Clash -import com.github.kr328.clash.service.util.resolvePrimaryDns +import com.github.kr328.clash.service.util.resolveDns import kotlinx.coroutines.NonCancellable import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.channels.trySendBlocking @@ -69,8 +69,8 @@ class NetworkObserveModule(service: Service) : Module(service) { } } - val dns = networks.mapNotNull { - connectivity.resolvePrimaryDns(it) + val dns = networks.flatMap { network -> + connectivity?.resolveDns(network) ?: emptyList() } Clash.notifyDnsChanged(dns) diff --git a/service/src/main/java/com/github/kr328/clash/service/util/Connectivity.kt b/service/src/main/java/com/github/kr328/clash/service/util/Connectivity.kt index 51e4b4f8..32aa4827 100644 --- a/service/src/main/java/com/github/kr328/clash/service/util/Connectivity.kt +++ b/service/src/main/java/com/github/kr328/clash/service/util/Connectivity.kt @@ -3,8 +3,7 @@ package com.github.kr328.clash.service.util import android.net.ConnectivityManager import android.net.Network -fun ConnectivityManager.resolvePrimaryDns(network: Network?): String? { - val properties = getLinkProperties(network) ?: return null - - return properties.dnsServers.firstOrNull()?.asSocketAddressText(53) +fun ConnectivityManager.resolveDns(network: Network?): List { + val properties = getLinkProperties(network) ?: return listOf() + return properties.dnsServers.map { it.asSocketAddressText(53) } }