예제 #1
0
        private void TransmitLoop(CancellationToken token)
        {
            while (true)
            {
                byte[] buffer = null;
                if (stream == null)
                {
                    return;
                }
                try
                {
                    buffer = LibC.ReadDataWithTimeout(stream.Handle, MTU, 1000, () => token.IsCancellationRequested);
                }
                catch (ArgumentException)
                {
                    // stream was closed
                    return;
                }
                catch (ObjectDisposedException)
                {
                    return;
                }

                if (token.IsCancellationRequested)
                {
                    return;
                }
                if (buffer == null || buffer.Length == 0)
                {
                    continue;
                }
                var ethernetFrame = EthernetFrame.CreateEthernetFrameWithCRC(buffer);
                FrameReady?.Invoke(ethernetFrame);
            }
        }
        private void TransmitLoop(CancellationToken token)
        {
            while (true)
            {
                byte[] buffer = null;
                if (stream == null)
                {
                    return;
                }
                try
                {
                    buffer = LibC.ReadDataWithTimeout(stream.Handle, MTU, 1000, () => token.IsCancellationRequested);
                }
                catch (ArgumentException)
                {
                    // stream was closed
                    return;
                }
                catch (ObjectDisposedException)
                {
                    return;
                }

                if (token.IsCancellationRequested)
                {
                    return;
                }
                if (buffer == null || buffer.Length == 0)
                {
                    continue;
                }
                if (Misc.TryCreateFrameOrLogWarning(this, buffer, out var frame, addCrc: true))
                {
                    FrameReady?.Invoke(frame);
                }
            }
        }