Add IPv6 loopback address by default #1434
This commit is contained in:
parent
11c7eb5665
commit
06134bc6e0
|
|
@ -17,7 +17,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Internal.Infrastructure
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The IPEndPoint Kestrel will bind to if nothing else is specified.
|
/// The IPEndPoint Kestrel will bind to if nothing else is specified.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static readonly IPEndPoint DefaultIPEndPoint = new IPEndPoint(IPAddress.Loopback, 5000);
|
public static readonly string DefaultServerAddress = "http://localhost:5000";
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Prefix of host name used to specify Unix sockets in the configuration.
|
/// Prefix of host name used to specify Unix sockets in the configuration.
|
||||||
|
|
|
||||||
|
|
@ -142,8 +142,16 @@ namespace Microsoft.AspNetCore.Server.Kestrel
|
||||||
}
|
}
|
||||||
else if (!hasListenOptions && !hasServerAddresses)
|
else if (!hasListenOptions && !hasServerAddresses)
|
||||||
{
|
{
|
||||||
_logger.LogDebug($"No listening endpoints were configured. Binding to {Constants.DefaultIPEndPoint} by default.");
|
_logger.LogDebug($"No listening endpoints were configured. Binding to {Constants.DefaultServerAddress} by default.");
|
||||||
listenOptions.Add(new ListenOptions(Constants.DefaultIPEndPoint));
|
|
||||||
|
// "localhost" for both IPv4 and IPv6 can't be represented as an IPEndPoint.
|
||||||
|
StartLocalhost(engine, ServerAddress.FromUrl(Constants.DefaultServerAddress));
|
||||||
|
|
||||||
|
// If StartLocalhost doesn't throw, there is at least one listener.
|
||||||
|
// The port cannot change for "localhost".
|
||||||
|
_serverAddresses.Addresses.Add(Constants.DefaultServerAddress);
|
||||||
|
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
else if (!hasListenOptions)
|
else if (!hasListenOptions)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -132,16 +132,29 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
|
||||||
|
|
||||||
[ConditionalFact]
|
[ConditionalFact]
|
||||||
[PortSupportedCondition(5000)]
|
[PortSupportedCondition(5000)]
|
||||||
public async Task DefaultsToPort5000()
|
public Task DefaultsServerAddress_BindsToIPv4()
|
||||||
|
{
|
||||||
|
return RegisterDefaultServerAddresses_Success(new[] { "http://127.0.0.1:5000" });
|
||||||
|
}
|
||||||
|
|
||||||
|
[ConditionalFact]
|
||||||
|
[IPv6SupportedCondition]
|
||||||
|
[PortSupportedCondition(5000)]
|
||||||
|
public Task DefaultsServerAddress_BindsToIPv6()
|
||||||
|
{
|
||||||
|
return RegisterDefaultServerAddresses_Success(new[] { "http://127.0.0.1:5000", "http://[::1]:5000" });
|
||||||
|
}
|
||||||
|
|
||||||
|
private async Task RegisterDefaultServerAddresses_Success(IEnumerable<string> addresses)
|
||||||
{
|
{
|
||||||
var testLogger = new TestApplicationErrorLogger();
|
var testLogger = new TestApplicationErrorLogger();
|
||||||
|
|
||||||
var hostBuilder = new WebHostBuilder()
|
var hostBuilder = new WebHostBuilder()
|
||||||
.UseKestrel()
|
.UseKestrel()
|
||||||
.ConfigureServices(services =>
|
.ConfigureServices(services =>
|
||||||
{
|
{
|
||||||
services.AddSingleton<ILoggerFactory>(new KestrelTestLoggerFactory(testLogger));
|
services.AddSingleton<ILoggerFactory>(new KestrelTestLoggerFactory(testLogger));
|
||||||
})
|
})
|
||||||
.Configure(ConfigureEchoAddress);
|
.Configure(ConfigureEchoAddress);
|
||||||
|
|
||||||
using (var host = hostBuilder.Build())
|
using (var host = hostBuilder.Build())
|
||||||
|
|
@ -150,12 +163,12 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
|
||||||
|
|
||||||
Assert.Equal(5000, host.GetPort());
|
Assert.Equal(5000, host.GetPort());
|
||||||
Assert.Single(testLogger.Messages, log => log.LogLevel == LogLevel.Debug &&
|
Assert.Single(testLogger.Messages, log => log.LogLevel == LogLevel.Debug &&
|
||||||
string.Equals($"No listening endpoints were configured. Binding to {Constants.DefaultIPEndPoint} by default.",
|
string.Equals($"No listening endpoints were configured. Binding to {Constants.DefaultServerAddress} by default.",
|
||||||
log.Message, StringComparison.Ordinal));
|
log.Message, StringComparison.Ordinal));
|
||||||
|
|
||||||
foreach (var testUrl in new[] { "http://127.0.0.1:5000", /* "http://[::1]:5000" */})
|
foreach (var address in addresses)
|
||||||
{
|
{
|
||||||
Assert.Equal(new Uri(testUrl).ToString(), await HttpClientSlim.GetStringAsync(testUrl));
|
Assert.Equal(new Uri(address).ToString(), await HttpClientSlim.GetStringAsync(address));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -373,8 +386,8 @@ namespace Microsoft.AspNetCore.Server.Kestrel.FunctionalTests
|
||||||
var dataset = new TheoryData<string, Func<IServerAddressesFeature, string[]>>();
|
var dataset = new TheoryData<string, Func<IServerAddressesFeature, string[]>>();
|
||||||
|
|
||||||
// Default host and port
|
// Default host and port
|
||||||
dataset.Add(null, _ => new[] { "http://127.0.0.1:5000/", /*"http://[::1]:5000/"*/ });
|
dataset.Add(null, _ => new[] { "http://127.0.0.1:5000/", "http://[::1]:5000/" });
|
||||||
dataset.Add(string.Empty, _ => new[] { "http://127.0.0.1:5000/", /*"http://[::1]:5000/"*/ });
|
dataset.Add(string.Empty, _ => new[] { "http://127.0.0.1:5000/", "http://[::1]:5000/" });
|
||||||
|
|
||||||
// Static ports
|
// Static ports
|
||||||
var port = GetNextPort();
|
var port = GetNextPort();
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue