NetSharp

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

commit f12027782987cc6dc066918f1ad26ba4d177f4a0
parent 8a128f45ec8dc8199978bcf597f8877a10a425d8
Author: Mikolaj Lenczewski <mikolaj.lenczewski308@gmail.com>
Date:   Sun, 26 Apr 2020 18:41:43 +0100

Fixed a stupid mistake with casting state tokens.

Diffstat:
MNetSharp/NetSharp/NetSharp.xml | 2+-
MNetSharp/NetSharp/Sockets/Datagram/DatagramSocketClient.cs | 4++--
MNetSharp/NetSharp/Sockets/SocketClient.cs | 13++++++++++++-
MNetSharp/NetSharp/Sockets/Stream/StreamSocketClient.cs | 4++--
4 files changed, 17 insertions(+), 6 deletions(-)

diff --git a/NetSharp/NetSharp/NetSharp.xml b/NetSharp/NetSharp/NetSharp.xml @@ -259,7 +259,7 @@ <summary> Abstract base class for clients. </summary> - TODO implement cancellation of ReceiveAsync and ReceiveFromAsync methods. + TODO implement proper memory leak-free cancellation of network IO operations </member> <member name="M:NetSharp.Sockets.SocketClient.#ctor(System.Net.Sockets.AddressFamily@,System.Net.Sockets.SocketType@,System.Net.Sockets.ProtocolType@,System.Int32@,System.UInt16@)"> <summary> diff --git a/NetSharp/NetSharp/Sockets/Datagram/DatagramSocketClient.cs b/NetSharp/NetSharp/Sockets/Datagram/DatagramSocketClient.cs @@ -218,7 +218,7 @@ namespace NetSharp.Sockets.Datagram { // TODO find out why the fricc we leak memory CancellationTokenRegistration cancellationRegistration = - cancellationToken.Register(CancelAsyncTransmissionCallback, args); + cancellationToken.Register(CancelAsyncReceiveCallback, args); if (Connection.ReceiveFromAsync(args)) return new ValueTask<TransmissionResult>( @@ -271,7 +271,7 @@ namespace NetSharp.Sockets.Datagram { // TODO find out why the fricc we leak memory CancellationTokenRegistration cancellationRegistration = - cancellationToken.Register(CancelAsyncTransmissionCallback, args); + cancellationToken.Register(CancelAsyncSendCallback, args); if (Connection.SendToAsync(args)) return new ValueTask<TransmissionResult>( diff --git a/NetSharp/NetSharp/Sockets/SocketClient.cs b/NetSharp/NetSharp/Sockets/SocketClient.cs @@ -48,7 +48,18 @@ namespace NetSharp.Sockets DestroyTransmissionArgs(args); } - protected void CancelAsyncTransmissionCallback(object state) + protected void CancelAsyncReceiveCallback(object state) + { + SocketAsyncEventArgs args = (SocketAsyncEventArgs)state; + + AsyncReceiveToken token = (AsyncReceiveToken)args.UserToken; + + token.CompletionSource.SetResult(TransmissionResult.Timeout); + + DestroyTransmissionArgs(args); + } + + protected void CancelAsyncSendCallback(object state) { SocketAsyncEventArgs args = (SocketAsyncEventArgs)state; diff --git a/NetSharp/NetSharp/Sockets/Stream/StreamSocketClient.cs b/NetSharp/NetSharp/Sockets/Stream/StreamSocketClient.cs @@ -334,7 +334,7 @@ namespace NetSharp.Sockets.Stream { // TODO find out why the fricc we leak memory CancellationTokenRegistration cancellationRegistration = - cancellationToken.Register(CancelAsyncTransmissionCallback, args); + cancellationToken.Register(CancelAsyncReceiveCallback, args); if (Connection.ReceiveAsync(args)) return new ValueTask<TransmissionResult>( @@ -391,7 +391,7 @@ namespace NetSharp.Sockets.Stream { // TODO find out why the fricc we leak memory CancellationTokenRegistration cancellationRegistration = - cancellationToken.Register(CancelAsyncTransmissionCallback, args); + cancellationToken.Register(CancelAsyncSendCallback, args); if (Connection.SendAsync(args)) return new ValueTask<TransmissionResult>(