maxTimeToLive
This commit is contained in:
parent
f2553e245e
commit
7fe23b5542
@ -32,9 +32,12 @@ namespace FastGithub.DomainResolve
|
|||||||
|
|
||||||
private readonly ConcurrentDictionary<string, SemaphoreSlim> semaphoreSlims = new();
|
private readonly ConcurrentDictionary<string, SemaphoreSlim> semaphoreSlims = new();
|
||||||
private readonly IMemoryCache dnsCache = new MemoryCache(Options.Create(new MemoryCacheOptions()));
|
private readonly IMemoryCache dnsCache = new MemoryCache(Options.Create(new MemoryCacheOptions()));
|
||||||
private readonly TimeSpan defaultEmptyTtl = TimeSpan.FromSeconds(30d);
|
|
||||||
|
private readonly TimeSpan minTimeToLive = TimeSpan.FromSeconds(30d);
|
||||||
|
private readonly TimeSpan maxTimeToLive = TimeSpan.FromMinutes(10d);
|
||||||
|
|
||||||
private readonly int resolveTimeout = (int)TimeSpan.FromSeconds(2d).TotalMilliseconds;
|
private readonly int resolveTimeout = (int)TimeSpan.FromSeconds(2d).TotalMilliseconds;
|
||||||
private static readonly TimeSpan maxConnectTimeout = TimeSpan.FromSeconds(2d);
|
private static readonly TimeSpan connectTimeout = TimeSpan.FromSeconds(2d);
|
||||||
|
|
||||||
private record LookupResult(IPAddress[] Addresses, TimeSpan TimeToLive);
|
private record LookupResult(IPAddress[] Addresses, TimeSpan TimeToLive);
|
||||||
|
|
||||||
@ -164,7 +167,7 @@ namespace FastGithub.DomainResolve
|
|||||||
|
|
||||||
if (addresses.Length == 0)
|
if (addresses.Length == 0)
|
||||||
{
|
{
|
||||||
return new LookupResult(addresses, this.defaultEmptyTtl);
|
return new LookupResult(addresses, this.minTimeToLive);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (addresses.Length > 1)
|
if (addresses.Length > 1)
|
||||||
@ -181,7 +184,11 @@ namespace FastGithub.DomainResolve
|
|||||||
var timeToLive = totalTimeToLive / addressRecords.Count;
|
var timeToLive = totalTimeToLive / addressRecords.Count;
|
||||||
if (timeToLive <= TimeSpan.Zero)
|
if (timeToLive <= TimeSpan.Zero)
|
||||||
{
|
{
|
||||||
timeToLive = this.defaultEmptyTtl;
|
timeToLive = this.minTimeToLive;
|
||||||
|
}
|
||||||
|
else if (timeToLive > this.maxTimeToLive)
|
||||||
|
{
|
||||||
|
timeToLive = this.maxTimeToLive;
|
||||||
}
|
}
|
||||||
|
|
||||||
return new LookupResult(addresses, timeToLive);
|
return new LookupResult(addresses, timeToLive);
|
||||||
@ -265,7 +272,7 @@ namespace FastGithub.DomainResolve
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
using var timeoutTokenSource = new CancellationTokenSource(maxConnectTimeout);
|
using var timeoutTokenSource = new CancellationTokenSource(connectTimeout);
|
||||||
using var linkedTokenSource = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken, timeoutTokenSource.Token);
|
using var linkedTokenSource = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken, timeoutTokenSource.Token);
|
||||||
using var socket = new Socket(SocketType.Stream, ProtocolType.Tcp);
|
using var socket = new Socket(SocketType.Stream, ProtocolType.Tcp);
|
||||||
await socket.ConnectAsync(address, port, linkedTokenSource.Token);
|
await socket.ConnectAsync(address, port, linkedTokenSource.Token);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user