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