dns解析重试
This commit is contained in:
		
							parent
							
								
									8cc28f5f47
								
							
						
					
					
						commit
						14aa806058
					
				@ -81,7 +81,7 @@ namespace FastGithub.DomainResolve
 | 
				
			|||||||
            try
 | 
					            try
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                await semaphore.WaitAsync();
 | 
					                await semaphore.WaitAsync();
 | 
				
			||||||
                return await this.LookupAsync(domain, cancellationToken);
 | 
					                return await this.ResolveNoCacheAsync(domain, cancellationToken);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            finally
 | 
					            finally
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
@ -90,12 +90,13 @@ namespace FastGithub.DomainResolve
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
        /// 查找ip
 | 
					        /// 解析域名
 | 
				
			||||||
 | 
					        /// 不使用缓存
 | 
				
			||||||
        /// </summary>
 | 
					        /// </summary>
 | 
				
			||||||
        /// <param name="domain"></param>
 | 
					        /// <param name="domain"></param>
 | 
				
			||||||
        /// <param name="cancellationToken"></param>
 | 
					        /// <param name="cancellationToken"></param>
 | 
				
			||||||
        /// <returns></returns>
 | 
					        /// <returns></returns>
 | 
				
			||||||
        private async Task<IPAddress> LookupAsync(DnsEndPoint domain, CancellationToken cancellationToken)
 | 
					        private async Task<IPAddress> ResolveNoCacheAsync(DnsEndPoint domain, CancellationToken cancellationToken)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            if (this.domainResolveCache.TryGetValue<IPAddress>(domain, out var address))
 | 
					            if (this.domainResolveCache.TryGetValue<IPAddress>(domain, out var address))
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
@ -105,7 +106,7 @@ namespace FastGithub.DomainResolve
 | 
				
			|||||||
            var expiration = this.dnscryptExpiration;
 | 
					            var expiration = this.dnscryptExpiration;
 | 
				
			||||||
            if (this.dnscryptProxy.LocalEndPoint != null)
 | 
					            if (this.dnscryptProxy.LocalEndPoint != null)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                address = await this.LookupCoreAsync(this.dnscryptProxy.LocalEndPoint, domain, cancellationToken);
 | 
					                address = await this.LookupAsync(this.dnscryptProxy.LocalEndPoint, domain, cancellationToken);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if (address == null)
 | 
					            if (address == null)
 | 
				
			||||||
@ -140,7 +141,7 @@ namespace FastGithub.DomainResolve
 | 
				
			|||||||
        {
 | 
					        {
 | 
				
			||||||
            foreach (var dns in this.fastGithubConfig.FallbackDns)
 | 
					            foreach (var dns in this.fastGithubConfig.FallbackDns)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                var address = await this.LookupCoreAsync(dns, domain, cancellationToken);
 | 
					                var address = await this.LookupAsync(dns, domain, cancellationToken);
 | 
				
			||||||
                if (address != null)
 | 
					                if (address != null)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    return address;
 | 
					                    return address;
 | 
				
			||||||
@ -149,7 +150,6 @@ namespace FastGithub.DomainResolve
 | 
				
			|||||||
            return default;
 | 
					            return default;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
        /// 查找ip
 | 
					        /// 查找ip
 | 
				
			||||||
        /// </summary>
 | 
					        /// </summary>
 | 
				
			||||||
@ -157,7 +157,10 @@ namespace FastGithub.DomainResolve
 | 
				
			|||||||
        /// <param name="domain"></param>
 | 
					        /// <param name="domain"></param>
 | 
				
			||||||
        /// <param name="cancellationToken"></param>
 | 
					        /// <param name="cancellationToken"></param>
 | 
				
			||||||
        /// <returns></returns>
 | 
					        /// <returns></returns>
 | 
				
			||||||
        private async Task<IPAddress?> LookupCoreAsync(IPEndPoint dns, DnsEndPoint domain, CancellationToken cancellationToken)
 | 
					        private async Task<IPAddress?> LookupAsync(IPEndPoint dns, DnsEndPoint domain, CancellationToken cancellationToken)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            const int MAX_TRY_COUNT = 2;
 | 
				
			||||||
 | 
					            for (var i = 0; i < MAX_TRY_COUNT; i++)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                try
 | 
					                try
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
@ -168,6 +171,10 @@ namespace FastGithub.DomainResolve
 | 
				
			|||||||
                    addresses = addresses.Where(address => this.disableIPAddressCache.TryGetValue(address, out _) == false).ToList();
 | 
					                    addresses = addresses.Where(address => this.disableIPAddressCache.TryGetValue(address, out _) == false).ToList();
 | 
				
			||||||
                    return await this.FindFastValueAsync(addresses, domain.Port, cancellationToken);
 | 
					                    return await this.FindFastValueAsync(addresses, domain.Port, cancellationToken);
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					                catch (OperationCanceledException)
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    continue;
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
                catch (Exception ex)
 | 
					                catch (Exception ex)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    this.logger.LogWarning($"dns({dns})无法解析{domain.Host}:{ex.Message}");
 | 
					                    this.logger.LogWarning($"dns({dns})无法解析{domain.Host}:{ex.Message}");
 | 
				
			||||||
@ -175,6 +182,10 @@ namespace FastGithub.DomainResolve
 | 
				
			|||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            this.logger.LogWarning($"dns({dns})无法解析{domain.Host}");
 | 
				
			||||||
 | 
					            return default;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
        /// 获取最快的ip
 | 
					        /// 获取最快的ip
 | 
				
			||||||
@ -220,7 +231,7 @@ namespace FastGithub.DomainResolve
 | 
				
			|||||||
            }
 | 
					            }
 | 
				
			||||||
            catch (OperationCanceledException)
 | 
					            catch (OperationCanceledException)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                this.SetDisabled(address, TimeSpan.FromMilliseconds(1d));
 | 
					                this.SetDisabled(address, TimeSpan.FromMilliseconds(2d));
 | 
				
			||||||
                return default;
 | 
					                return default;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            catch (Exception)
 | 
					            catch (Exception)
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user