/// <summary>
        /// Receive Loop
        /// </summary>
        private void ReceiveLoop()
        {
            try
            {
                TimeSpan    timeout;
                object      remoteEndpoint;
                StackPacket receivedPacket;
                timeout = new TimeSpan(0, 0, 0, 0, 100); // 100 milliseconds.

                // Check whether cancellation is requested before entering each receive loop.
                while (!receiveThreadCancellationTokenSource.IsCancellationRequested)
                {
                    try
                    {
                        receivedPacket = udpTransport.ExpectPacket(timeout, out remoteEndpoint);
                        socket.ReceivePacket(receivedPacket);
                    }
                    catch (TimeoutException)
                    { }
                }
            }
            catch (Exception ex)
            {
                UnhandledExceptionReceived?.Invoke(ex);
            }
        }
        /// <summary>
        /// Receive Loop
        /// </summary>
        private void ReceiveLoop()
        {
            TimeSpan    timeout;
            object      remoteEndpoint;
            StackPacket receivedPacket;

            timeout = new TimeSpan(0, 0, 0, 0, 100); // 100 milliseconds.
            while (running)
            {                                        // An infinite loop to receive packet from transport stack.
                try
                {
                    receivedPacket = udpTransport.ExpectPacket(timeout, out remoteEndpoint);
                    socket.ReceivePacket(receivedPacket);
                }
                catch (TimeoutException)
                { }
                Thread.Sleep(RdpeudpSocketConfig.ReceivingInterval);
            }
        }