public override void Abort()
{
if (NetEventSource.IsEnabled)
{
NetEventSource.Enter(this);
}
bool thisLockTaken = false;
bool sessionHandleLockTaken = false;
try
{
if (IsStateTerminal(State))
{
return;
}
TakeLocks(ref thisLockTaken, ref sessionHandleLockTaken);
if (IsStateTerminal(State))
{
return;
}
_state = WebSocketState.Aborted;
// Abort any outstanding IO operations.
if (SessionHandle != null && !SessionHandle.IsClosed && !SessionHandle.IsInvalid)
{
WebSocketProtocolComponent.WebSocketAbortHandle(SessionHandle);
}
_receiveOutstandingOperationHelper.CancelIO();
_sendOutstandingOperationHelper.CancelIO();
_closeOutputOutstandingOperationHelper.CancelIO();
_closeOutstandingOperationHelper.CancelIO();
if (_innerStreamAsWebSocketStream != null)
{
_innerStreamAsWebSocketStream.Abort();
}
CleanUp();
}
finally
{
ReleaseLocks(ref thisLockTaken, ref sessionHandleLockTaken);
if (NetEventSource.IsEnabled)
{
NetEventSource.Exit(this);
}
}
}