NetSharp

NetSharp.git
git clone git://git.lenczewski.org/NetSharp.git
Log | Files | Refs | README | LICENSE

commit ad902fdd4a8c07adc5fab988ad2c58d17a4b9106
parent 88a598c295266260b3f6bc2a01b3715ca7ee85ef
Author: Mikolaj Lenczewski <mikolaj.lenczewski308@gmail.com>
Date:   Tue,  9 Jun 2020 18:54:14 +0100

Fixed Memory<>.CopyTo issue with RawStreamNetworkReader

Diffstat:
MNetSharp/NetSharp/NetSharp.xml | 87++++++-------------------------------------------------------------------------
MNetSharp/NetSharp/Raw/Stream/RawStreamNetworkReader.cs | 62+++++++++++++++++++++++++++++++++++++++++++++-----------------
MNetSharp/NetSharp/Raw/Stream/RawStreamNetworkWriter.cs | 48++++++++++++++++++++++++++++++++++++------------
MNetSharp/NetSharp/Raw/Stream/RawStreamPacket.cs | 6++++--
MNetSharp/NetSharp/Utils/SlimObjectPool.cs | 2+-
MNetSharp/NetSharpExamples/Benchmarks/Stream Network Connection Benchmarks/StreamNetworkReaderBenchmark.cs | 2+-
MNetSharp/NetSharpExamples/NetSharpExamples.xml | 60++++++++++++------------------------------------------------
7 files changed, 105 insertions(+), 162 deletions(-)

diff --git a/NetSharp/NetSharp/NetSharp.xml b/NetSharp/NetSharp/NetSharp.xml @@ -55,31 +55,22 @@ <member name="M:NetSharp.Raw.Datagram.RawDatagramNetworkWriter.WriteAsync(System.Net.EndPoint,System.ReadOnlyMemory{System.Byte},System.Net.Sockets.SocketFlags)"> <inheritdoc /> </member> - <member name="P:NetSharp.Raw.DatagramRawNetworkTransportProvider.TransportProtocolType"> + <member name="P:NetSharp.Raw.RawDatagramNetworkTransportProvider.TransportProtocolType"> <inheritdoc /> </member> - <member name="M:NetSharp.Raw.DatagramRawNetworkTransportProvider.GetReader(System.Net.Sockets.Socket@,System.Net.EndPoint,NetSharp.Raw.Datagram.RawDatagramRequestHandler,System.Int32,System.Int32,System.UInt32)"> + <member name="M:NetSharp.Raw.RawDatagramNetworkTransportProvider.GetReader(System.Net.Sockets.Socket@,System.Net.EndPoint,NetSharp.Raw.Datagram.RawDatagramRequestHandler,System.Int32,System.Int32,System.UInt32)"> <inheritdoc /> </member> - <member name="M:NetSharp.Raw.DatagramRawNetworkTransportProvider.GetWriter(System.Net.Sockets.Socket@,System.Net.EndPoint,System.Int32,System.Int32,System.UInt32)"> + <member name="M:NetSharp.Raw.RawDatagramNetworkTransportProvider.GetWriter(System.Net.Sockets.Socket@,System.Net.EndPoint,System.Int32,System.Int32,System.UInt32)"> <inheritdoc /> </member> - <member name="P:NetSharp.Raw.FixedPacketRawStreamNetworkTransportProvider.TransportProtocolType"> + <member name="P:NetSharp.Raw.RawStreamNetworkTransportProvider.TransportProtocolType"> <inheritdoc /> </member> - <member name="M:NetSharp.Raw.FixedPacketRawStreamNetworkTransportProvider.GetReader(System.Net.Sockets.Socket@,System.Net.EndPoint,NetSharp.Raw.Stream.RawStreamRequestHandler,System.Int32,System.Int32,System.UInt32)"> + <member name="M:NetSharp.Raw.RawStreamNetworkTransportProvider.GetReader(System.Net.Sockets.Socket@,System.Net.EndPoint,NetSharp.Raw.Stream.RawStreamRequestHandler,System.Int32,System.Int32,System.UInt32)"> <inheritdoc /> </member> - <member name="M:NetSharp.Raw.FixedPacketRawStreamNetworkTransportProvider.GetWriter(System.Net.Sockets.Socket@,System.Net.EndPoint,System.Int32,System.Int32,System.UInt32)"> - <inheritdoc /> - </member> - <member name="P:NetSharp.Raw.VariablePacketRawStreamNetworkTransportProvider.TransportProtocolType"> - <inheritdoc /> - </member> - <member name="M:NetSharp.Raw.VariablePacketRawStreamNetworkTransportProvider.GetReader(System.Net.Sockets.Socket@,System.Net.EndPoint,NetSharp.Raw.Stream.RawStreamRequestHandler,System.Int32,System.Int32,System.UInt32)"> - <inheritdoc /> - </member> - <member name="M:NetSharp.Raw.VariablePacketRawStreamNetworkTransportProvider.GetWriter(System.Net.Sockets.Socket@,System.Net.EndPoint,System.Int32,System.Int32,System.UInt32)"> + <member name="M:NetSharp.Raw.RawStreamNetworkTransportProvider.GetWriter(System.Net.Sockets.Socket@,System.Net.EndPoint,System.Int32,System.Int32,System.UInt32)"> <inheritdoc /> </member> <member name="M:NetSharp.Raw.RawNetworkConnectionBase.Dispose(System.Boolean)"> @@ -123,39 +114,6 @@ <member name="M:NetSharp.Raw.RawNetworkWriterBase.WriteAsync(System.Net.EndPoint,System.ReadOnlyMemory{System.Byte},System.Net.Sockets.SocketFlags)"> <inheritdoc /> </member> - <member name="M:NetSharp.Raw.Stream.FixedPacketRawStreamNetworkReader.#ctor(System.Net.Sockets.Socket@,NetSharp.Raw.Stream.RawStreamRequestHandler,System.Net.EndPoint,System.Int32,System.Int32,System.UInt32)"> - <inheritdoc /> - </member> - <member name="M:NetSharp.Raw.Stream.FixedPacketRawStreamNetworkReader.CompleteAccept(System.Net.Sockets.SocketAsyncEventArgs)"> - <inheritdoc /> - </member> - <member name="M:NetSharp.Raw.Stream.FixedPacketRawStreamNetworkReader.CompleteReceive(System.Net.Sockets.SocketAsyncEventArgs)"> - <inheritdoc /> - </member> - <member name="M:NetSharp.Raw.Stream.FixedPacketRawStreamNetworkReader.CompleteSend(System.Net.Sockets.SocketAsyncEventArgs)"> - <inheritdoc /> - </member> - <member name="M:NetSharp.Raw.Stream.FixedPacketRawStreamNetworkWriter.#ctor(System.Net.Sockets.Socket@,System.Net.EndPoint,System.Int32,System.Int32,System.UInt32)"> - <inheritdoc /> - </member> - <member name="M:NetSharp.Raw.Stream.FixedPacketRawStreamNetworkWriter.CompleteReceive(System.Net.Sockets.SocketAsyncEventArgs)"> - <inheritdoc /> - </member> - <member name="M:NetSharp.Raw.Stream.FixedPacketRawStreamNetworkWriter.CompleteSend(System.Net.Sockets.SocketAsyncEventArgs)"> - <inheritdoc /> - </member> - <member name="M:NetSharp.Raw.Stream.FixedPacketRawStreamNetworkWriter.Read(System.Net.EndPoint@,System.Memory{System.Byte},System.Net.Sockets.SocketFlags)"> - <inheritdoc /> - </member> - <member name="M:NetSharp.Raw.Stream.FixedPacketRawStreamNetworkWriter.ReadAsync(System.Net.EndPoint,System.Memory{System.Byte},System.Net.Sockets.SocketFlags)"> - <inheritdoc /> - </member> - <member name="M:NetSharp.Raw.Stream.FixedPacketRawStreamNetworkWriter.Write(System.Net.EndPoint,System.ReadOnlyMemory{System.Byte},System.Net.Sockets.SocketFlags)"> - <inheritdoc /> - </member> - <member name="M:NetSharp.Raw.Stream.FixedPacketRawStreamNetworkWriter.WriteAsync(System.Net.EndPoint,System.ReadOnlyMemory{System.Byte},System.Net.Sockets.SocketFlags)"> - <inheritdoc /> - </member> <member name="M:NetSharp.Raw.Stream.RawStreamNetworkReader.#ctor(System.Net.Sockets.Socket@,NetSharp.Raw.Stream.RawStreamRequestHandler,System.Net.EndPoint,System.Int32,System.Int32,System.UInt32)"> <inheritdoc /> </member> @@ -195,39 +153,6 @@ <member name="M:NetSharp.Raw.Stream.RawStreamNetworkWriter.ConnectAsync(System.Net.EndPoint)"> <inheritdoc /> </member> - <member name="M:NetSharp.Raw.Stream.VariablePacketRawStreamNetworkReader.#ctor(System.Net.Sockets.Socket@,NetSharp.Raw.Stream.RawStreamRequestHandler,System.Net.EndPoint,System.Int32,System.Int32,System.UInt32)"> - <inheritdoc /> - </member> - <member name="M:NetSharp.Raw.Stream.VariablePacketRawStreamNetworkReader.CompleteAccept(System.Net.Sockets.SocketAsyncEventArgs)"> - <inheritdoc /> - </member> - <member name="M:NetSharp.Raw.Stream.VariablePacketRawStreamNetworkReader.CompleteReceive(System.Net.Sockets.SocketAsyncEventArgs)"> - <inheritdoc /> - </member> - <member name="M:NetSharp.Raw.Stream.VariablePacketRawStreamNetworkReader.CompleteSend(System.Net.Sockets.SocketAsyncEventArgs)"> - <inheritdoc /> - </member> - <member name="M:NetSharp.Raw.Stream.VariablePacketRawStreamNetworkWriter.#ctor(System.Net.Sockets.Socket@,System.Net.EndPoint,System.Int32,System.Int32,System.UInt32)"> - <inheritdoc /> - </member> - <member name="M:NetSharp.Raw.Stream.VariablePacketRawStreamNetworkWriter.CompleteReceive(System.Net.Sockets.SocketAsyncEventArgs)"> - <inheritdoc /> - </member> - <member name="M:NetSharp.Raw.Stream.VariablePacketRawStreamNetworkWriter.CompleteSend(System.Net.Sockets.SocketAsyncEventArgs)"> - <inheritdoc /> - </member> - <member name="M:NetSharp.Raw.Stream.VariablePacketRawStreamNetworkWriter.Read(System.Net.EndPoint@,System.Memory{System.Byte},System.Net.Sockets.SocketFlags)"> - <inheritdoc /> - </member> - <member name="M:NetSharp.Raw.Stream.VariablePacketRawStreamNetworkWriter.ReadAsync(System.Net.EndPoint,System.Memory{System.Byte},System.Net.Sockets.SocketFlags)"> - <inheritdoc /> - </member> - <member name="M:NetSharp.Raw.Stream.VariablePacketRawStreamNetworkWriter.Write(System.Net.EndPoint,System.ReadOnlyMemory{System.Byte},System.Net.Sockets.SocketFlags)"> - <inheritdoc /> - </member> - <member name="M:NetSharp.Raw.Stream.VariablePacketRawStreamNetworkWriter.WriteAsync(System.Net.EndPoint,System.ReadOnlyMemory{System.Byte},System.Net.Sockets.SocketFlags)"> - <inheritdoc /> - </member> <member name="T:NetSharp.Utils.BiDictionary`2"> <summary> Represents a concurrent two-way dictionary, that can be indexed by either a key or a value. diff --git a/NetSharp/NetSharp/Raw/Stream/RawStreamNetworkReader.cs b/NetSharp/NetSharp/Raw/Stream/RawStreamNetworkReader.cs @@ -67,21 +67,21 @@ namespace NetSharp.Raw.Stream private void CompleteReceive(SocketAsyncEventArgs args) { - void CompleteReceiveHeader(SocketAsyncEventArgs args) + RequestReadToken readToken = (RequestReadToken) args.UserToken; + + void CompleteReceiveHeader(SocketAsyncEventArgs args, in RequestReadToken readToken) { Memory<byte> headerBuffer = args.Buffer; int receivedBytes = args.BytesTransferred, previousReceivedBytes = args.Offset, totalReceivedBytes = previousReceivedBytes + receivedBytes, - expectedBytes = args.Buffer.Length; + expectedBytes = readToken.BytesToTransfer; if (totalReceivedBytes == expectedBytes) // transmission complete { RawStreamPacketHeader header = RawStreamPacketHeader.Deserialise(in headerBuffer); - args.UserToken = header; // allow the header to be used in the CompleteReceiveData method - ConfigureReceiveData(args, in header); StartReceive(args); } @@ -97,26 +97,26 @@ namespace NetSharp.Raw.Stream } } - void CompleteReceiveData(SocketAsyncEventArgs args) + void CompleteReceiveData(SocketAsyncEventArgs args, in RequestReadToken readToken) { Memory<byte> dataBuffer = args.Buffer; - RawStreamPacketHeader requestPacketHeader = (RawStreamPacketHeader) args.UserToken; int receivedBytes = args.BytesTransferred, previousReceivedBytes = args.Offset, totalReceivedBytes = previousReceivedBytes + receivedBytes, - expectedBytes = args.Buffer.Length; + expectedBytes = readToken.BytesToTransfer; if (totalReceivedBytes == expectedBytes) // transmission complete { EndPoint clientEndPoint = args.AcceptSocket.RemoteEndPoint; // TODO use user-supplied delegate to get response packet size - int responseBufferSize = RawStreamPacket.TotalPacketSize(expectedBytes); + int responseBufferDataSize = expectedBytes; + int responseBufferSize = RawStreamPacket.TotalPacketSize(responseBufferDataSize); byte[] responseBuffer = BufferPool.Rent(responseBufferSize); - Memory<byte> responseBufferMemory = responseBuffer[RawStreamPacketHeader.TotalSize..expectedBytes]; + Memory<byte> responseBufferMemory = responseBuffer.AsMemory(RawStreamPacketHeader.TotalSize, responseBufferDataSize); // TODO rework request handler bool responseExists = RequestHandler(clientEndPoint, dataBuffer, totalReceivedBytes, responseBufferMemory); @@ -124,7 +124,7 @@ namespace NetSharp.Raw.Stream switch (responseExists) { case true: - RawStreamPacket response = new RawStreamPacket(in responseBufferMemory); + RawStreamPacket response = new RawStreamPacket(in responseBufferMemory, responseBufferDataSize); ConfigureSendResponse(args, ref responseBuffer, in response); StartSend(args); @@ -152,7 +152,7 @@ namespace NetSharp.Raw.Stream } } - bool receivingHeader = args.Buffer.Length == RawStreamPacketHeader.TotalSize; + bool receivingHeader = readToken.BytesToTransfer == RawStreamPacketHeader.TotalSize; switch (args.SocketError) { @@ -160,11 +160,11 @@ namespace NetSharp.Raw.Stream switch (receivingHeader) { case true: - CompleteReceiveHeader(args); + CompleteReceiveHeader(args, in readToken); break; case false: - CompleteReceiveData(args); + CompleteReceiveData(args, in readToken); break; } break; @@ -177,10 +177,12 @@ namespace NetSharp.Raw.Stream private void CompleteSend(SocketAsyncEventArgs args) { + ResponseWriteToken writeToken = (ResponseWriteToken) args.UserToken; + int sentBytes = args.BytesTransferred, previousSentBytes = args.Offset, totalSentBytes = previousSentBytes + sentBytes, - expectedBytes = args.Buffer.Length; + expectedBytes = writeToken.BytesToTransfer; switch (args.SocketError) { @@ -214,7 +216,8 @@ namespace NetSharp.Raw.Stream byte[] pendingPacketDataBuffer = BufferPool.Rent(receivedPacketHeader.DataSize); - args.SetBuffer(pendingPacketDataBuffer, 0, pendingPacketDataBuffer.Length); + args.SetBuffer(pendingPacketDataBuffer, 0, receivedPacketHeader.DataSize); + args.UserToken = new RequestReadToken(receivedPacketHeader.DataSize, receivedPacketHeader); } private void ConfigureReceiveHeader(SocketAsyncEventArgs args) @@ -223,7 +226,8 @@ namespace NetSharp.Raw.Stream byte[] pendingPacketHeaderBuffer = BufferPool.Rent(RawStreamPacketHeader.TotalSize); - args.SetBuffer(pendingPacketHeaderBuffer, 0, pendingPacketHeaderBuffer.Length); + args.SetBuffer(pendingPacketHeaderBuffer, 0, RawStreamPacketHeader.TotalSize); + args.UserToken = new RequestReadToken(RawStreamPacketHeader.TotalSize, null); } private void ConfigureSendResponse(SocketAsyncEventArgs args, ref byte[] pendingPacketBuffer, in RawStreamPacket pendingPacket) @@ -232,7 +236,8 @@ namespace NetSharp.Raw.Stream pendingPacket.Serialise(pendingPacketBuffer); - args.SetBuffer(pendingPacketBuffer, 0, pendingPacketBuffer.Length); + args.SetBuffer(pendingPacketBuffer, 0, pendingPacket.TotalSize); + args.UserToken = new ResponseWriteToken(pendingPacket.TotalSize); } private void ContinueReceive(SocketAsyncEventArgs args) @@ -389,5 +394,28 @@ namespace NetSharp.Raw.Stream StartDefaultAccept(); } } + + private readonly struct RequestReadToken + { + public readonly int BytesToTransfer; + public readonly RawStreamPacketHeader? Header; + + public RequestReadToken(int bytesToTransfer, in RawStreamPacketHeader? header) + { + BytesToTransfer = bytesToTransfer; + + Header = header; + } + } + + private readonly struct ResponseWriteToken + { + public readonly int BytesToTransfer; + + public ResponseWriteToken(int bytesToTransfer) + { + BytesToTransfer = bytesToTransfer; + } + } } } \ No newline at end of file diff --git a/NetSharp/NetSharp/Raw/Stream/RawStreamNetworkWriter.cs b/NetSharp/NetSharp/Raw/Stream/RawStreamNetworkWriter.cs @@ -6,10 +6,10 @@ using System.Threading.Tasks; namespace NetSharp.Raw.Stream { - public abstract class RawStreamNetworkWriter : RawNetworkWriterBase + public sealed class RawStreamNetworkWriter : RawNetworkWriterBase { /// <inheritdoc /> - protected RawStreamNetworkWriter(ref Socket rawConnection, EndPoint defaultEndPoint, int maxMessageSize, int pooledBuffersPerBucket = 50, + public RawStreamNetworkWriter(ref Socket rawConnection, EndPoint defaultEndPoint, int maxMessageSize, int pooledBuffersPerBucket = 50, uint preallocatedStateObjects = 0) : base(ref rawConnection, defaultEndPoint, maxMessageSize, pooledBuffersPerBucket, preallocatedStateObjects) { if (maxMessageSize <= 0) @@ -65,6 +65,14 @@ namespace NetSharp.Raw.Stream ArgsPool.Return(args); } + private void CompleteReceive(SocketAsyncEventArgs args) + { + } + + private void CompleteSend(SocketAsyncEventArgs args) + { + } + private void HandleIoCompleted(object sender, SocketAsyncEventArgs args) { switch (args.LastOperation) @@ -88,15 +96,11 @@ namespace NetSharp.Raw.Stream } /// <inheritdoc /> - protected sealed override bool CanReuseStateObject(ref SocketAsyncEventArgs instance) + protected override bool CanReuseStateObject(ref SocketAsyncEventArgs instance) { return true; } - protected abstract void CompleteReceive(SocketAsyncEventArgs args); - - protected abstract void CompleteSend(SocketAsyncEventArgs args); - [MethodImpl(MethodImplOptions.AggressiveInlining)] protected void ContinueReceive(SocketAsyncEventArgs args) { @@ -120,7 +124,7 @@ namespace NetSharp.Raw.Stream } /// <inheritdoc /> - protected sealed override SocketAsyncEventArgs CreateStateObject() + protected override SocketAsyncEventArgs CreateStateObject() { SocketAsyncEventArgs args = new SocketAsyncEventArgs(); args.Completed += HandleIoCompleted; @@ -129,25 +133,25 @@ namespace NetSharp.Raw.Stream } /// <inheritdoc /> - protected sealed override void DestroyStateObject(SocketAsyncEventArgs instance) + protected override void DestroyStateObject(SocketAsyncEventArgs instance) { instance.Completed -= HandleIoCompleted; instance.Dispose(); } /// <inheritdoc /> - protected sealed override void ResetStateObject(ref SocketAsyncEventArgs instance) + protected override void ResetStateObject(ref SocketAsyncEventArgs instance) { } /// <inheritdoc /> - public sealed override void Connect(EndPoint remoteEndPoint) + public override void Connect(EndPoint remoteEndPoint) { Connection.Connect(remoteEndPoint); } /// <inheritdoc /> - public sealed override ValueTask ConnectAsync(EndPoint remoteEndPoint) + public override ValueTask ConnectAsync(EndPoint remoteEndPoint) { TaskCompletionSource<bool> tcs = new TaskCompletionSource<bool>(); SocketAsyncEventArgs args = ArgsPool.Rent(); @@ -191,5 +195,25 @@ namespace NetSharp.Raw.Stream return new ValueTask(); } + + public override int Read(ref EndPoint remoteEndPoint, Memory<byte> readBuffer, SocketFlags flags = SocketFlags.None) + { + throw new NotImplementedException(); + } + + public override ValueTask<int> ReadAsync(EndPoint remoteEndPoint, Memory<byte> readBuffer, SocketFlags flags = SocketFlags.None) + { + throw new NotImplementedException(); + } + + public override int Write(EndPoint remoteEndPoint, ReadOnlyMemory<byte> writeBuffer, SocketFlags flags = SocketFlags.None) + { + throw new NotImplementedException(); + } + + public override ValueTask<int> WriteAsync(EndPoint remoteEndPoint, ReadOnlyMemory<byte> writeBuffer, SocketFlags flags = SocketFlags.None) + { + throw new NotImplementedException(); + } } } \ No newline at end of file diff --git a/NetSharp/NetSharp/Raw/Stream/RawStreamPacket.cs b/NetSharp/NetSharp/Raw/Stream/RawStreamPacket.cs @@ -17,13 +17,15 @@ namespace NetSharp.Raw.Stream Data = packetData; } - public RawStreamPacket(in Memory<byte> packetData) + public RawStreamPacket(in Memory<byte> packetData, int packetDataSize) { - Header = new RawStreamPacketHeader(packetData.Length); + Header = new RawStreamPacketHeader(packetDataSize); Data = packetData; } + public int TotalSize => RawStreamPacketHeader.TotalSize + Data.Length; + public static RawStreamPacket Deserialise(in Memory<byte> buffer) { Memory<byte> serialisedHeader = buffer.Slice(0, RawStreamPacketHeader.TotalSize); diff --git a/NetSharp/NetSharp/Utils/SlimObjectPool.cs b/NetSharp/NetSharp/Utils/SlimObjectPool.cs @@ -9,7 +9,7 @@ namespace NetSharp.Utils /// <typeparam name="T"> /// The type of item stored in the pool. /// </typeparam> - public readonly struct SlimObjectPool<T> : IDisposable where T : class + public sealed class SlimObjectPool<T> : IDisposable where T : class { private readonly CanRebufferObjectPredicate canObjectBeRebufferedPredicate; diff --git a/NetSharp/NetSharpExamples/Benchmarks/Stream Network Connection Benchmarks/StreamNetworkReaderBenchmark.cs b/NetSharp/NetSharpExamples/Benchmarks/Stream Network Connection Benchmarks/StreamNetworkReaderBenchmark.cs @@ -60,7 +60,7 @@ namespace NetSharpExamples.Benchmarks.Stream_Network_Connection_Benchmarks { ServerEncoding.GetBytes($"[Client {id}] Hello World! (Packet {i})").CopyTo(packetBuffer, 0); - RawStreamPacket streamPacket = new RawStreamPacket(packetBuffer); + RawStreamPacket streamPacket = new RawStreamPacket(packetBuffer, PacketSize); streamPacket.Serialise(sendBuffer); benchmarkHelper.StartStopwatch(); diff --git a/NetSharp/NetSharpExamples/NetSharpExamples.xml b/NetSharp/NetSharpExamples/NetSharpExamples.xml @@ -22,40 +22,22 @@ <member name="M:NetSharpExamples.Benchmarks.Datagram_Network_Connection_Benchmarks.DatagramNetworkWriterSyncBenchmark.RunAsync"> <inheritdoc /> </member> - <member name="P:NetSharpExamples.Benchmarks.Stream_Network_Connection_Benchmarks.FixedPacketStreamNetworkReaderBenchmark.Name"> + <member name="P:NetSharpExamples.Benchmarks.Stream_Network_Connection_Benchmarks.StreamNetworkReaderBenchmark.Name"> <inheritdoc /> </member> - <member name="M:NetSharpExamples.Benchmarks.Stream_Network_Connection_Benchmarks.FixedPacketStreamNetworkReaderBenchmark.RunAsync"> + <member name="M:NetSharpExamples.Benchmarks.Stream_Network_Connection_Benchmarks.StreamNetworkReaderBenchmark.RunAsync"> <inheritdoc /> </member> - <member name="P:NetSharpExamples.Benchmarks.Stream_Network_Connection_Benchmarks.FixedPacketStreamNetworkWriterAsyncBenchmark.Name"> + <member name="P:NetSharpExamples.Benchmarks.Stream_Network_Connection_Benchmarks.StreamNetworkWriterAsyncBenchmark.Name"> <inheritdoc /> </member> - <member name="M:NetSharpExamples.Benchmarks.Stream_Network_Connection_Benchmarks.FixedPacketStreamNetworkWriterAsyncBenchmark.RunAsync"> + <member name="M:NetSharpExamples.Benchmarks.Stream_Network_Connection_Benchmarks.StreamNetworkWriterAsyncBenchmark.RunAsync"> <inheritdoc /> </member> - <member name="P:NetSharpExamples.Benchmarks.Stream_Network_Connection_Benchmarks.FixedPacketStreamNetworkWriterSyncBenchmark.Name"> + <member name="P:NetSharpExamples.Benchmarks.Stream_Network_Connection_Benchmarks.StreamNetworkWriterSyncBenchmark.Name"> <inheritdoc /> </member> - <member name="M:NetSharpExamples.Benchmarks.Stream_Network_Connection_Benchmarks.FixedPacketStreamNetworkWriterSyncBenchmark.RunAsync"> - <inheritdoc /> - </member> - <member name="P:NetSharpExamples.Benchmarks.Stream_Network_Connection_Benchmarks.VariablePacketStreamNetworkReaderBenchmark.Name"> - <inheritdoc /> - </member> - <member name="M:NetSharpExamples.Benchmarks.Stream_Network_Connection_Benchmarks.VariablePacketStreamNetworkReaderBenchmark.RunAsync"> - <inheritdoc /> - </member> - <member name="P:NetSharpExamples.Benchmarks.Stream_Network_Connection_Benchmarks.VariablePacketStreamNetworkWriterAsyncBenchmark.Name"> - <inheritdoc /> - </member> - <member name="M:NetSharpExamples.Benchmarks.Stream_Network_Connection_Benchmarks.VariablePacketStreamNetworkWriterAsyncBenchmark.RunAsync"> - <inheritdoc /> - </member> - <member name="P:NetSharpExamples.Benchmarks.Stream_Network_Connection_Benchmarks.VariablePacketStreamNetworkWriterSyncBenchmark.Name"> - <inheritdoc /> - </member> - <member name="M:NetSharpExamples.Benchmarks.Stream_Network_Connection_Benchmarks.VariablePacketStreamNetworkWriterSyncBenchmark.RunAsync"> + <member name="M:NetSharpExamples.Benchmarks.Stream_Network_Connection_Benchmarks.StreamNetworkWriterSyncBenchmark.RunAsync"> <inheritdoc /> </member> <member name="P:NetSharpExamples.Examples.Datagram_Network_Connection_Examples.DatagramNetworkReaderExample.Name"> @@ -76,40 +58,22 @@ <member name="M:NetSharpExamples.Examples.Datagram_Network_Connection_Examples.DatagramNetworkWriterSyncExample.RunAsync"> <inheritdoc /> </member> - <member name="P:NetSharpExamples.Examples.Stream_Network_Connection_Examples.FixedPacketStreamNetworkReaderExample.Name"> - <inheritdoc /> - </member> - <member name="M:NetSharpExamples.Examples.Stream_Network_Connection_Examples.FixedPacketStreamNetworkReaderExample.RunAsync"> - <inheritdoc /> - </member> - <member name="P:NetSharpExamples.Examples.Stream_Network_Connection_Examples.FixedPacketStreamNetworkWriterAsyncExample.Name"> - <inheritdoc /> - </member> - <member name="M:NetSharpExamples.Examples.Stream_Network_Connection_Examples.FixedPacketStreamNetworkWriterAsyncExample.RunAsync"> - <inheritdoc /> - </member> - <member name="P:NetSharpExamples.Examples.Stream_Network_Connection_Examples.FixedPacketStreamNetworkWriterSyncExample.Name"> - <inheritdoc /> - </member> - <member name="M:NetSharpExamples.Examples.Stream_Network_Connection_Examples.FixedPacketStreamNetworkWriterSyncExample.RunAsync"> - <inheritdoc /> - </member> - <member name="P:NetSharpExamples.Examples.Stream_Network_Connection_Examples.VariablePacketStreamNetworkReaderExample.Name"> + <member name="P:NetSharpExamples.Examples.Stream_Network_Connection_Examples.StreamNetworkReaderExample.Name"> <inheritdoc /> </member> - <member name="M:NetSharpExamples.Examples.Stream_Network_Connection_Examples.VariablePacketStreamNetworkReaderExample.RunAsync"> + <member name="M:NetSharpExamples.Examples.Stream_Network_Connection_Examples.StreamNetworkReaderExample.RunAsync"> <inheritdoc /> </member> - <member name="P:NetSharpExamples.Examples.Stream_Network_Connection_Examples.VariablePacketStreamNetworkWriterAsyncExample.Name"> + <member name="P:NetSharpExamples.Examples.Stream_Network_Connection_Examples.StreamNetworkWriterAsyncExample.Name"> <inheritdoc /> </member> - <member name="M:NetSharpExamples.Examples.Stream_Network_Connection_Examples.VariablePacketStreamNetworkWriterAsyncExample.RunAsync"> + <member name="M:NetSharpExamples.Examples.Stream_Network_Connection_Examples.StreamNetworkWriterAsyncExample.RunAsync"> <inheritdoc /> </member> - <member name="P:NetSharpExamples.Examples.Stream_Network_Connection_Examples.VariablePacketStreamNetworkWriterSyncExample.Name"> + <member name="P:NetSharpExamples.Examples.Stream_Network_Connection_Examples.StreamNetworkWriterSyncExample.Name"> <inheritdoc /> </member> - <member name="M:NetSharpExamples.Examples.Stream_Network_Connection_Examples.VariablePacketStreamNetworkWriterSyncExample.RunAsync"> + <member name="M:NetSharpExamples.Examples.Stream_Network_Connection_Examples.StreamNetworkWriterSyncExample.RunAsync"> <inheritdoc /> </member> <member name="T:NetSharpExamples.INetSharpExample">