Author: cgutman Date: Sun Apr 25 00:37:45 2010 New Revision: 47007
URL: http://svn.reactos.org/svn/reactos?rev=47007&view=rev Log: [IP] - Don't try to close the connection again if it has already been terminated by the remote peer
Modified: trunk/reactos/lib/drivers/ip/transport/tcp/tcp.c
Modified: trunk/reactos/lib/drivers/ip/transport/tcp/tcp.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/lib/drivers/ip/transport/tc... ============================================================================== --- trunk/reactos/lib/drivers/ip/transport/tcp/tcp.c [iso-8859-1] (original) +++ trunk/reactos/lib/drivers/ip/transport/tcp/tcp.c [iso-8859-1] Sun Apr 25 00:37:45 2010 @@ -735,16 +735,24 @@ Socket = Connection->SocketContext; Connection->SocketContext = NULL;
- /* We need to close here otherwise oskit will never indicate - * SEL_FIN and we will never fully close the connection - */ - Status = TCPTranslateError( OskitTCPClose( Socket ) ); - - if (!NT_SUCCESS(Status)) + /* Don't try to close again if the other side closed us already */ + if (Connection->SignalState != SEL_FIN) { - Connection->SocketContext = Socket; - UnlockObject(Connection, OldIrql); - return Status; + /* We need to close here otherwise oskit will never indicate + * SEL_FIN and we will never fully close the connection */ + Status = TCPTranslateError( OskitTCPClose( Socket ) ); + + if (!NT_SUCCESS(Status)) + { + Connection->SocketContext = Socket; + UnlockObject(Connection, OldIrql); + return Status; + } + } + else + { + /* We are already closed by the other end so return success */ + Status = STATUS_SUCCESS; }
if (Connection->AddressFile)