- Don't try to close the connection again if it has already been terminated by the remote peer

svn path=/trunk/; revision=47007
This commit is contained in:
Cameron Gutman 2010-04-24 22:37:45 +00:00
parent d35aa96218
commit 740cd5ef90

View file

@ -735,16 +735,24 @@ NTSTATUS TCPClose
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)