NetSharp

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

commit 60c74165c2ac85cc4168b4acc0be67d126a8ab26
parent f9030c42836d1192587ff4ba128a9062ae25f406
Author: Mikolaj Lenczewski <mikolaj.lenczewski308@gmail.com>
Date:   Tue,  5 May 2020 09:51:02 +0100

Imagine properly handling AcceptAsync. Could not be me

Diffstat:
MNetSharp/NetSharp/Raw/Stream/StreamNetworkReader.cs | 13+++++++++++--
1 file changed, 11 insertions(+), 2 deletions(-)

diff --git a/NetSharp/NetSharp/Raw/Stream/StreamNetworkReader.cs b/NetSharp/NetSharp/Raw/Stream/StreamNetworkReader.cs @@ -25,8 +25,6 @@ namespace NetSharp.Raw.Stream clientSocket.Dispose(); StateObjectPool.Return(args); - - StartDefaultAccept(); } private void CompleteAccept(SocketAsyncEventArgs args) @@ -37,10 +35,21 @@ namespace NetSharp.Raw.Stream StartReceive(args); break; + case SocketError.ConnectionReset: + /* + * The SocketAsyncEventArgs.Completed event can occur in some cases when no connection has been accepted and cause the SocketAsyncEventArgs.SocketError property to be set to ConnectionReset. + * This can occur as a result of port scanning using a half-open SYN type scan (a SYN -> SYN-ACK -> RST sequence). + * Applications using the AcceptAsync method should be prepared to handle this condition. + */ + StateObjectPool.Return(args); + break; + default: StateObjectPool.Return(args); break; } + + StartDefaultAccept(); } private void CompleteReceive(SocketAsyncEventArgs args)