aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLibravatar vnugent <public@vaughnnugent.com>2024-01-05 18:13:08 -0500
committerLibravatar vnugent <public@vaughnnugent.com>2024-01-05 18:13:08 -0500
commitc7cbe768eb153efd61568178b3b9d0b4f50e20a7 (patch)
treed8d664080d45d538639e3d71bce3f2f50810c1f5
parent884df3a501458a4fc1b75ac48d8df62e6ca0879b (diff)
fix tx buffer clear after sync send, clear on release
-rw-r--r--lib/Net.Transport.SimpleTCP/src/AwaitableAsyncServerSocket.cs33
1 files changed, 20 insertions, 13 deletions
diff --git a/lib/Net.Transport.SimpleTCP/src/AwaitableAsyncServerSocket.cs b/lib/Net.Transport.SimpleTCP/src/AwaitableAsyncServerSocket.cs
index 8bedf89..e287d64 100644
--- a/lib/Net.Transport.SimpleTCP/src/AwaitableAsyncServerSocket.cs
+++ b/lib/Net.Transport.SimpleTCP/src/AwaitableAsyncServerSocket.cs
@@ -217,8 +217,10 @@ namespace VNLib.Net.Transport.Tcp
public void Release()
{
+ //Make sure any operation specific data is cleared
AcceptSocket = null;
UserToken = null;
+ SetBuffer(default);
}
protected override void OnCompleted(SocketAsyncEventArgs e)
@@ -275,14 +277,14 @@ namespace VNLib.Net.Transport.Tcp
//Reset task source
AsyncTaskCore = default;
- if(!sock.AcceptAsync(this))
+ if(sock.AcceptAsync(this))
{
//Async op pending, return the task
- return ValueTask.FromResult(SocketError);
+ return new ValueTask<SocketError>(this, AsyncTaskCore.Version);
}
- //Async accept
- return new ValueTask<SocketError>(this, AsyncTaskCore.Version);
+ //Sync op completed
+ return ValueTask.FromResult(SocketError);
}
/// <summary>
@@ -298,13 +300,14 @@ namespace VNLib.Net.Transport.Tcp
AsyncTaskCore = default;
//accept async
- if (!serverSock.DisconnectAsync(this))
+ if (serverSock.DisconnectAsync(this))
{
- return ValueTask.FromResult(SocketError);
+ //Async disconnect
+ return new ValueTask<SocketError>(this, AsyncTaskCore.Version);
+
}
- //Async accept
- return new ValueTask<SocketError>(this, AsyncTaskCore.Version);
+ return ValueTask.FromResult(SocketError);
}
@@ -323,12 +326,11 @@ namespace VNLib.Net.Transport.Tcp
return new ValueTask<int>(this, AsyncTaskCore.Version);
}
+ //clear buffer
+ SetBuffer(default);
+
//Sync send
- return SocketError switch
- {
- SocketError.Success => ValueTask.FromResult(BytesTransferred),
- _ => ValueTask.FromException<int>(new SocketException((int)SocketError))
- };
+ return GetSyncTxRxResult();
}
public ValueTask<int> ReceiveAsync(Socket socket, SocketFlags flags)
@@ -349,6 +351,11 @@ namespace VNLib.Net.Transport.Tcp
//Clear buffer
SetBuffer(default);
+ return GetSyncTxRxResult();
+ }
+
+ private ValueTask<int> GetSyncTxRxResult()
+ {
//Sync send
return SocketError switch
{