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(); } }
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(); } }