From 37bfc3db83e93287b11b4a101015716f27055ae2 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E8=80=81=E4=B9=9D?= <366193849@qq.com>
Date: Tue, 7 Sep 2021 10:26:21 +0800
Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=9F=9F=E5=90=8D=E8=A7=A3?=
=?UTF-8?q?=E6=9E=90?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
FastGithub.DomainResolve/DomainResolver.cs | 46 ++++++++++++++--------
1 file changed, 30 insertions(+), 16 deletions(-)
diff --git a/FastGithub.DomainResolve/DomainResolver.cs b/FastGithub.DomainResolve/DomainResolver.cs
index c74cc75..1a3b249 100644
--- a/FastGithub.DomainResolve/DomainResolver.cs
+++ b/FastGithub.DomainResolve/DomainResolver.cs
@@ -83,16 +83,7 @@ namespace FastGithub.DomainResolve
try
{
await semaphore.WaitAsync();
-
- for (var i = 0; i < 2; i++)
- {
- var address = await this.ResolveCoreAsync(domain, cancellationToken);
- if (address != null)
- {
- return address;
- }
- }
- throw new FastGithubException($"当前解析不到{domain.Host}可用的ip,请刷新重试");
+ return await this.ResolveCoreAsync(domain, cancellationToken);
}
finally
{
@@ -106,8 +97,9 @@ namespace FastGithub.DomainResolve
///
///
///
+ ///
///
- private async Task ResolveCoreAsync(DnsEndPoint domain, CancellationToken cancellationToken)
+ private async Task ResolveCoreAsync(DnsEndPoint domain, CancellationToken cancellationToken)
{
if (this.domainResolveCache.TryGetValue(domain, out var address) && address != null)
{
@@ -115,10 +107,7 @@ namespace FastGithub.DomainResolve
}
var expiration = this.dnscryptExpiration;
- if (this.dnscryptProxy.LocalEndPoint != null)
- {
- address = await this.LookupAsync(this.dnscryptProxy.LocalEndPoint, domain, cancellationToken);
- }
+ address = await this.LookupByDnscryptAsync(domain, cancellationToken);
if (address == null)
{
@@ -128,7 +117,7 @@ namespace FastGithub.DomainResolve
if (address == null)
{
- return null;
+ throw new FastGithubException($"当前解析不到{domain.Host}可用的ip,请刷新重试");
}
// 往往是被污染的dns
@@ -141,6 +130,31 @@ namespace FastGithub.DomainResolve
return address;
}
+
+ ///
+ /// Dnscrypt查找ip
+ ///
+ ///
+ ///
+ ///
+ ///
+ private async Task LookupByDnscryptAsync(DnsEndPoint domain, CancellationToken cancellationToken, int maxTryCount = 2)
+ {
+ if (this.dnscryptProxy.LocalEndPoint != null)
+ {
+ for (var i = 0; i < maxTryCount; i++)
+ {
+ var address = await this.LookupAsync(this.dnscryptProxy.LocalEndPoint, domain, cancellationToken);
+ if (address != null)
+ {
+ return address;
+ }
+ }
+ }
+ return default;
+ }
+
+
///
/// 回退查找ip
///