Emul8.HostInterfaces.Network.LinuxTapInterface.TransmitLoop C# (CSharp) Method

TransmitLoop() private method

private TransmitLoop ( CancellationToken token ) : void
token System.Threading.CancellationToken
return void
        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 = new EthernetFrame(buffer, true);
                Link.TransmitFrameFromInterface(ethernetFrame);
            }
        }