Merge branch 'release/2.1' into dev

This commit is contained in:
Stephen Halter 2018-05-31 16:29:14 -07:00
commit aa9b9ca724
5 changed files with 35 additions and 5 deletions

View File

@ -145,6 +145,13 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http
return _requestStream.ReadAsync(buffer, offset, count, cancellationToken); return _requestStream.ReadAsync(buffer, offset, count, cancellationToken);
} }
#if NETCOREAPP2_1
public override ValueTask<int> ReadAsync(Memory<byte> destination, CancellationToken cancellationToken = default)
{
return _requestStream.ReadAsync(destination, cancellationToken);
}
#endif
public override Task CopyToAsync(Stream destination, int bufferSize, CancellationToken cancellationToken) public override Task CopyToAsync(Stream destination, int bufferSize, CancellationToken cancellationToken)
{ {
return _requestStream.CopyToAsync(destination, bufferSize, cancellationToken); return _requestStream.CopyToAsync(destination, bufferSize, cancellationToken);
@ -155,6 +162,13 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http
return _responseStream.WriteAsync(buffer, offset, count, cancellationToken); return _responseStream.WriteAsync(buffer, offset, count, cancellationToken);
} }
#if NETCOREAPP2_1
public override ValueTask WriteAsync(ReadOnlyMemory<byte> source, CancellationToken cancellationToken = default)
{
return _responseStream.WriteAsync(source, cancellationToken);
}
#endif
public override long Seek(long offset, SeekOrigin origin) public override long Seek(long offset, SeekOrigin origin)
{ {
return _requestStream.Seek(offset, origin); return _requestStream.Seek(offset, origin);

View File

@ -68,6 +68,11 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Infrastructure
public override Task<int> ReadAsync(byte[] buffer, int offset, int count, CancellationToken cancellationToken) public override Task<int> ReadAsync(byte[] buffer, int offset, int count, CancellationToken cancellationToken)
=> _inner.ReadAsync(buffer, offset, count, cancellationToken); => _inner.ReadAsync(buffer, offset, count, cancellationToken);
#if NETCOREAPP2_1
public override ValueTask<int> ReadAsync(Memory<byte> destination, CancellationToken cancellationToken = default)
=> _inner.ReadAsync(destination, cancellationToken);
#endif
public override int ReadByte() public override int ReadByte()
=> _inner.ReadByte(); => _inner.ReadByte();
@ -83,6 +88,11 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Infrastructure
public override Task WriteAsync(byte[] buffer, int offset, int count, CancellationToken cancellationToken) public override Task WriteAsync(byte[] buffer, int offset, int count, CancellationToken cancellationToken)
=> _inner.WriteAsync(buffer, offset, count, cancellationToken); => _inner.WriteAsync(buffer, offset, count, cancellationToken);
#if NETCOREAPP2_1
public override ValueTask WriteAsync(ReadOnlyMemory<byte> source, CancellationToken cancellationToken = default)
=> _inner.WriteAsync(source, cancellationToken);
#endif
public override void WriteByte(byte value) public override void WriteByte(byte value)
=> _inner.WriteByte(value); => _inner.WriteByte(value);

View File

@ -20,6 +20,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.Internal
internal sealed class SocketConnection : TransportConnection, IDisposable internal sealed class SocketConnection : TransportConnection, IDisposable
{ {
private static readonly int MinAllocBufferSize = KestrelMemoryPool.MinimumSegmentSize / 2; private static readonly int MinAllocBufferSize = KestrelMemoryPool.MinimumSegmentSize / 2;
private static readonly bool IsWindows = RuntimeInformation.IsOSPlatform(OSPlatform.Windows);
private readonly Socket _socket; private readonly Socket _socket;
private readonly PipeScheduler _scheduler; private readonly PipeScheduler _scheduler;
@ -54,8 +55,13 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.Internal
ConnectionClosed = _connectionClosedTokenSource.Token; ConnectionClosed = _connectionClosedTokenSource.Token;
_receiver = new SocketReceiver(_socket, _scheduler); // On *nix platforms, Sockets already dispatches to the ThreadPool.
_sender = new SocketSender(_socket, _scheduler); // Yes, the IOQueues are still used for the PipeSchedulers. This is intentional.
// https://github.com/aspnet/KestrelHttpServer/issues/2573
var awaiterScheduler = IsWindows ? _scheduler : PipeScheduler.Inline;
_receiver = new SocketReceiver(_socket, awaiterScheduler);
_sender = new SocketSender(_socket, awaiterScheduler);
} }
public override MemoryPool<byte> MemoryPool { get; } public override MemoryPool<byte> MemoryPool { get; }

View File

@ -11,7 +11,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets
= new ResourceManager("Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.SocketsStrings", typeof(SocketsStrings).GetTypeInfo().Assembly); = new ResourceManager("Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.SocketsStrings", typeof(SocketsStrings).GetTypeInfo().Assembly);
/// <summary> /// <summary>
/// Only ListenType.IPEndPoint is supported. /// Only ListenType.IPEndPoint is supported by the Socket Transport. https://go.microsoft.com/fwlink/?linkid=874850
/// </summary> /// </summary>
internal static string OnlyIPEndPointsSupported internal static string OnlyIPEndPointsSupported
{ {
@ -19,7 +19,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets
} }
/// <summary> /// <summary>
/// Only ListenType.IPEndPoint is supported. /// Only ListenType.IPEndPoint is supported by the Socket Transport. https://go.microsoft.com/fwlink/?linkid=874850
/// </summary> /// </summary>
internal static string FormatOnlyIPEndPointsSupported() internal static string FormatOnlyIPEndPointsSupported()
=> GetString("OnlyIPEndPointsSupported"); => GetString("OnlyIPEndPointsSupported");

View File

@ -118,7 +118,7 @@
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader> </resheader>
<data name="OnlyIPEndPointsSupported" xml:space="preserve"> <data name="OnlyIPEndPointsSupported" xml:space="preserve">
<value>Only ListenType.IPEndPoint is supported.</value> <value>Only ListenType.IPEndPoint is supported by the Socket Transport. https://go.microsoft.com/fwlink/?linkid=874850</value>
</data> </data>
<data name="TransportAlreadyBound" xml:space="preserve"> <data name="TransportAlreadyBound" xml:space="preserve">
<value>Transport is already bound.</value> <value>Transport is already bound.</value>