示例#1
0
文件: Udp.cs 项目: doruu12/NetUV
        void InvokeRead(IArrayBuffer <byte> byteBuffer, int size, IPEndPoint remoteEndPoint, Exception error = null)
        {
            if (size == 0 && error == null)
            {
                // Filter out empty data received if not an error
                //
                // On windows the udp receive actually been call with empty data
                // for broadcast, on Linux, the receive is not called at all.
                //
                byteBuffer?.Release();
                return;
            }

            ReadableBuffer buffer     = size > 0 ? new ReadableBuffer(byteBuffer, size) : ReadableBuffer.Empty;
            var            completion = new DatagramReadCompletion(ref buffer, error, remoteEndPoint);

            try
            {
                this.readAction?.Invoke(this, completion);
            }
            catch (Exception exception)
            {
                Log.Warn($"{nameof(Udp)} Exception whilst invoking read callback.", exception);
            }
            finally
            {
                completion.Dispose();
            }
        }
示例#2
0
        private void InvokeRead(IByteBuffer byteBuffer, int size, IPEndPoint remoteEndPoint, Exception error = null)
        {
            if ((uint)(size - 1) > SharedConstants.TooBigOrNegative) // <= 0
            {
                byteBuffer.Release();

                if (error is null && 0u >= (uint)size)
                {
                    // Filter out empty data received if not an error
                    //
                    // On windows the udp receive actually been call with empty data
                    // for broadcast, on Linux, the receive is not called at all.
                    //
                    return;
                }
            }

            ReadableBuffer buffer     = size > 0 ? new ReadableBuffer(byteBuffer, size) : ReadableBuffer.Empty;
            var            completion = new DatagramReadCompletion(ref buffer, error, remoteEndPoint);

            try
            {
                _readAction?.Invoke(this, completion);
            }
            catch (Exception exception)
            {
                Log.Udp_Exception_whilst_invoking_read_callback(exception);
            }
            finally
            {
                completion.Dispose();
            }
        }