/// <summary> /// /// </summary> /// <param name="buffer"></param> /// <param name="cancellationToken"></param> /// <returns>-1 if error.</returns> public override async ValueTask <int> WriteAsync(ReadOnlyMemory <byte> buffer, CancellationToken cancellationToken = default) { if (_closed) { return(-1); } UpdateLastActive(); int written = -1; try { using (var arr = RecyclableByteArray.Rent(buffer.Length)) { buffer.CopyTo(arr.Array); written = await _sock.SendToAsync(new ArraySegment <byte>(arr.Array), SocketFlags.None, _locker.Number);//TODO waiting for a overload. } } catch (SocketException ex) { _logger?.LogError($"UdpClient2 SendToAsync error {ex.SocketErrorCode}, {ex.Message}."); return(-1); } catch (Exception ex) { _logger?.LogError($"UdpClient2 SendToAsync error {ex.Message}."); return(-1); } return(written); }
public void TestArrayPool() { byte[] arr1 = new byte[16]; System.Security.Cryptography.RandomNumberGenerator.Fill(arr1); Trace.TraceInformation(BitConverter.ToString(arr1).Replace("-", "")); var ra1 = RecyclableByteArray.Rent(16); arr1.AsSpan().CopyTo(ra1.Array.AsSpan()); Trace.TraceInformation(BitConverter.ToString(ra1.Array).Replace("-", "")); ra1.Dispose(); var ra2 = RecyclableByteArray.Rent(10); Trace.TraceInformation(BitConverter.ToString(ra2.Array).Replace("-", "")); Assert.IsTrue(ra2.Array.Length == 16); Assert.IsTrue(ra2.Array.AsSpan().SequenceEqual(arr1.AsSpan())); }