From c7cbe768eb153efd61568178b3b9d0b4f50e20a7 Mon Sep 17 00:00:00 2001 From: vnugent Date: Fri, 5 Jan 2024 18:13:08 -0500 Subject: fix tx buffer clear after sync send, clear on release --- .../src/AwaitableAsyncServerSocket.cs | 33 +++++++++++++--------- 1 file 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(this, AsyncTaskCore.Version); } - //Async accept - return new ValueTask(this, AsyncTaskCore.Version); + //Sync op completed + return ValueTask.FromResult(SocketError); } /// @@ -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(this, AsyncTaskCore.Version); + } - //Async accept - return new ValueTask(this, AsyncTaskCore.Version); + return ValueTask.FromResult(SocketError); } @@ -323,12 +326,11 @@ namespace VNLib.Net.Transport.Tcp return new ValueTask(this, AsyncTaskCore.Version); } + //clear buffer + SetBuffer(default); + //Sync send - return SocketError switch - { - SocketError.Success => ValueTask.FromResult(BytesTransferred), - _ => ValueTask.FromException(new SocketException((int)SocketError)) - }; + return GetSyncTxRxResult(); } public ValueTask ReceiveAsync(Socket socket, SocketFlags flags) @@ -349,6 +351,11 @@ namespace VNLib.Net.Transport.Tcp //Clear buffer SetBuffer(default); + return GetSyncTxRxResult(); + } + + private ValueTask GetSyncTxRxResult() + { //Sync send return SocketError switch { -- cgit