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:
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>(