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:
| M | NetSharp/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)