瀏覽代碼

累积可连接的IP

陈国伟 3 年之前
父節點
當前提交
378776ec74
共有 2 個文件被更改,包括 12 次插入5 次删除
  1. 1 1
      FastGithub.DomainResolve/DnsClient.cs
  2. 11 4
      FastGithub.DomainResolve/DomainResolver.cs

+ 1 - 1
FastGithub.DomainResolve/DnsClient.cs

@@ -36,7 +36,7 @@ namespace FastGithub.DomainResolve
         private readonly TimeSpan minTimeToLive = TimeSpan.FromSeconds(30d);
         private readonly TimeSpan minTimeToLive = TimeSpan.FromSeconds(30d);
         private readonly TimeSpan maxTimeToLive = TimeSpan.FromMinutes(10d);
         private readonly TimeSpan maxTimeToLive = TimeSpan.FromMinutes(10d);
 
 
-        private readonly int resolveTimeout = (int)TimeSpan.FromSeconds(2d).TotalMilliseconds;
+        private readonly int resolveTimeout = (int)TimeSpan.FromSeconds(4d).TotalMilliseconds;
         private static readonly TimeSpan connectTimeout = TimeSpan.FromSeconds(2d);
         private static readonly TimeSpan connectTimeout = TimeSpan.FromSeconds(2d);
 
 
         private record LookupResult(IList<IPAddress> Addresses, TimeSpan TimeToLive);
         private record LookupResult(IList<IPAddress> Addresses, TimeSpan TimeToLive);

+ 11 - 4
FastGithub.DomainResolve/DomainResolver.cs

@@ -99,7 +99,11 @@ namespace FastGithub.DomainResolve
                 if (keyValue.Value.IsEmpty || keyValue.Value.IsExpired)
                 if (keyValue.Value.IsEmpty || keyValue.Value.IsExpired)
                 {
                 {
                     var dnsEndPoint = keyValue.Key;
                     var dnsEndPoint = keyValue.Key;
-                    var addresses = new List<IPAddress>();
+                    var addresses = new HashSet<IPAddress>();
+                    foreach (var item in keyValue.Value)
+                    {
+                        addresses.Add(item.Adddress);
+                    }
                     await foreach (var adddress in this.dnsClient.ResolveAsync(dnsEndPoint, fastSort: false, cancellationToken))
                     await foreach (var adddress in this.dnsClient.ResolveAsync(dnsEndPoint, fastSort: false, cancellationToken))
                     {
                     {
                         addresses.Add(adddress);
                         addresses.Add(adddress);
@@ -108,14 +112,17 @@ namespace FastGithub.DomainResolve
                     var addressElapseds = IPAddressElapsedCollection.Empty;
                     var addressElapseds = IPAddressElapsedCollection.Empty;
                     if (addresses.Count == 1)
                     if (addresses.Count == 1)
                     {
                     {
-                        var addressElapsed = new IPAddressElapsed(addresses[0], TimeSpan.Zero);
+                        var addressElapsed = new IPAddressElapsed(addresses.First(), TimeSpan.Zero);
                         addressElapseds = new IPAddressElapsedCollection(addressElapsed);
                         addressElapseds = new IPAddressElapsedCollection(addressElapsed);
                     }
                     }
                     else if (addresses.Count > 1)
                     else if (addresses.Count > 1)
                     {
                     {
-                        var tasks = addresses.Select(address => IPAddressElapsed.ParseAsync(address, dnsEndPoint.Port, cancellationToken));
-                        addressElapseds = new IPAddressElapsedCollection(await Task.WhenAll(tasks));
+                        var parseTasks = addresses.Select(address => IPAddressElapsed.ParseAsync(address, dnsEndPoint.Port, cancellationToken));
+                        var parseValues = await Task.WhenAll(parseTasks);
+                        var connectedValues = parseValues.Where(item => item.Elapsed < TimeSpan.MaxValue);
+                        addressElapseds = new IPAddressElapsedCollection(connectedValues);
                     }
                     }
+
                     this.dnsEndPointAddressElapseds[dnsEndPoint] = addressElapseds;
                     this.dnsEndPointAddressElapseds[dnsEndPoint] = addressElapseds;
                     this.logger.LogInformation($"{dnsEndPoint.Host}->{addressElapseds}");
                     this.logger.LogInformation($"{dnsEndPoint.Host}->{addressElapseds}");
                 }
                 }