/// <summary> /// Terminates the connection. /// </summary> /// <param name="endType">The type of a connection close.</param> private void Close(CloseType endType) { lock (_stateLock) { switch (endType) { case CloseType.ConnectionKeepAlive: if (State != ConnectionState.Open) { return; } //Log.ConnectionKeepAlive(ConnectionId); break; case CloseType.SocketShutdown: case CloseType.SocketDisconnect: if (State == ConnectionState.Disconnecting || State == ConnectionState.SocketClosed) { return; } State = ConnectionState.Disconnecting; //Log.ConnectionDisconnect(ConnectionId); _rawSocketOutput.End(endType); break; } } }