BACnet.IP.UDPAsyncServer._receiveComplete C# (CSharp) Метод

_receiveComplete() приватный Метод

Called when an asynchronous receive operation completes
private _receiveComplete ( IAsyncResult result ) : void
result IAsyncResult The IAsyncResult of the asynchronous receive
Результат void
        private void _receiveComplete(IAsyncResult result)
        {
            if (result.CompletedSynchronously)
                return;

            bool received = false;
            IPEndPoint ep = null;
            int length = 0;
            byte[] buffer = (byte[])result.AsyncState;
            Queue<IAsyncResult> queue = null;

            while (result != null)
            {
                received = false;

                lock(_lock)
                {
                    if (_socket != null)
                    {
                        try
                        {
                            // complete this receive operation
                            length = _socket.EndReceiveFrom(result, ref _remoteEP);
                            ep = (IPEndPoint)_remoteEP;

                            // queue the next receive operation
                            IAsyncResult tempResult = _receiveNext();
                            if (tempResult.CompletedSynchronously)
                            {
                                if (queue == null)
                                    queue = new Queue<IAsyncResult>();
                                queue.Enqueue(tempResult);
                            }

                            received = true;
                        }
                        catch (SocketException)
                        {
                            _disposeAll();
                            break;
                        }
                    }

                }

                if (received)
                {
                    _receiveDelegate(ep, buffer, length);
                }

                result = (queue == null || queue.Count == 0) ? null : queue.Dequeue();
            }
        }