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