Example #1
0
        private async Task <TimeSpan> PingAsync(INetworkStream stream, CancellationToken cancellationToken)
        {
            var buffer = new byte[PingSize];

            using (var rng = RandomNumberGenerator.Create())
            {
                rng.GetNonZeroBytes(buffer);
            }

            var sw = new Stopwatch();

            sw.Start();

            if (await stream.WriteAsync(buffer, 0, buffer.Length, cancellationToken) != buffer.Length)
            {
                return(TimeSpan.Zero);
            }

            var rbuf = new byte[PingSize];

            if (await stream.ReadFullAsync(rbuf, cancellationToken: cancellationToken) != rbuf.Length)
            {
                return(TimeSpan.Zero);
            }

            if (!rbuf.SequenceEqual(buffer))
            {
                return(TimeSpan.Zero);
            }

            sw.Stop();
            return(sw.Elapsed);
        }