private void StartListenTask(object state)
{
try
{
var receiveBuffer = new byte[1500];
while (!_listenCancelToken.IsCancellationRequested)
{
var receiveBufferSize = _socket.Receive(receiveBuffer);
if (_verifyOrder)
{
var receivedPacketNumber = BitConverter.ToUInt64(receiveBuffer, 0);
if (receivedPacketNumber == 0)
{
_statistics.Reset();
}
else
{
var packetNumberDelta = receivedPacketNumber - _currentPacketNumber;
if (packetNumberDelta > 1)
_statistics.ReceivedPacketUnordered(packetNumberDelta - 1);
}
_currentPacketNumber = receivedPacketNumber;
}
if (receiveBufferSize != _packetDataSize)
_statistics.ReceivedPacketMismatchSize();
_statistics.ReceivedPacket();
}
}
catch (OperationCanceledException)
{
// StopListen() was called
}
catch (Exception e)
{
_log.Error("An error occurred while receiving data.", e);
}
}