public void Cleanup()
{
_encoder.Clear();
_decoder.Clear();
_socket = null;
RemoteEndpoint = EmptyEndpoint.Instance;
IsConnected = false;
if (_sendLock.CurrentCount == 0)
_sendLock.Release();
if (_closeEvent.CurrentCount == 1)
_closeEvent.Wait();
if (Data != null)
Data.Clear();
}