优化域名解析
This commit is contained in:
parent
977c69b9f8
commit
37bfc3db83
@ -83,16 +83,7 @@ namespace FastGithub.DomainResolve
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
await semaphore.WaitAsync();
|
await semaphore.WaitAsync();
|
||||||
|
return await this.ResolveCoreAsync(domain, cancellationToken);
|
||||||
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,请刷新重试");
|
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
@ -106,8 +97,9 @@ namespace FastGithub.DomainResolve
|
|||||||
/// <param name="domain"></param>
|
/// <param name="domain"></param>
|
||||||
/// <param name="cancellationToken"></param>
|
/// <param name="cancellationToken"></param>
|
||||||
/// <exception cref="OperationCanceledException"></exception>
|
/// <exception cref="OperationCanceledException"></exception>
|
||||||
|
/// <exception cref="FastGithubException"></exception>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
private async Task<IPAddress?> ResolveCoreAsync(DnsEndPoint domain, CancellationToken cancellationToken)
|
private async Task<IPAddress> ResolveCoreAsync(DnsEndPoint domain, CancellationToken cancellationToken)
|
||||||
{
|
{
|
||||||
if (this.domainResolveCache.TryGetValue<IPAddress>(domain, out var address) && address != null)
|
if (this.domainResolveCache.TryGetValue<IPAddress>(domain, out var address) && address != null)
|
||||||
{
|
{
|
||||||
@ -115,10 +107,7 @@ namespace FastGithub.DomainResolve
|
|||||||
}
|
}
|
||||||
|
|
||||||
var expiration = this.dnscryptExpiration;
|
var expiration = this.dnscryptExpiration;
|
||||||
if (this.dnscryptProxy.LocalEndPoint != null)
|
address = await this.LookupByDnscryptAsync(domain, cancellationToken);
|
||||||
{
|
|
||||||
address = await this.LookupAsync(this.dnscryptProxy.LocalEndPoint, domain, cancellationToken);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (address == null)
|
if (address == null)
|
||||||
{
|
{
|
||||||
@ -128,7 +117,7 @@ namespace FastGithub.DomainResolve
|
|||||||
|
|
||||||
if (address == null)
|
if (address == null)
|
||||||
{
|
{
|
||||||
return null;
|
throw new FastGithubException($"当前解析不到{domain.Host}可用的ip,请刷新重试");
|
||||||
}
|
}
|
||||||
|
|
||||||
// 往往是被污染的dns
|
// 往往是被污染的dns
|
||||||
@ -141,6 +130,31 @@ namespace FastGithub.DomainResolve
|
|||||||
return address;
|
return address;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Dnscrypt查找ip
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="domain"></param>
|
||||||
|
/// <param name="cancellationToken"></param>
|
||||||
|
/// <param name="maxTryCount"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
private async Task<IPAddress?> 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;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 回退查找ip
|
/// 回退查找ip
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user