public override Task WriteAsync(ArraySegment <byte> buffer, CancellationToken cancellationToken = new CancellationToken()) { var buf = ArrayPool <byte> .Shared.Rent(buffer.Count + 20); var ctext = new ArraySegment <byte>(buf, 20, buffer.Count); var tag = new ArraySegment <byte>(buf, 4, 16); BitConverter.TryWriteBytes(new ArraySegment <byte>(buf, 0, 4), buffer.Count); lock (_writeNonce) { _aes.Encrypt(_writeNonce, buffer, ctext, tag); IncrementNonce(_writeNonce); } async Task Send() { await WrappedSocket.WriteAsync(new ArraySegment <byte>(buf, 0, buffer.Count + 20), cancellationToken); ArrayPool <byte> .Shared.Return(buf); } return(Send()); }
public override Task WriteAsync(ArraySegment <byte> buffer, CancellationToken cancellationToken = new CancellationToken()) { _data.BytesWritten += buffer.Count; return(WrappedSocket.WriteAsync(buffer, cancellationToken)); }