public void ReceiveFrame(EthernetFrame frame)
{
// TODO: non blocking
if(stream == null)
{
return;
}
var handle = GCHandle.Alloc(frame.Bytes, GCHandleType.Pinned);
try
{
var result = LibC.WriteData(stream.Handle, handle.AddrOfPinnedObject(), frame.Length);
if(result == 0)
{
this.Log(LogLevel.Error,
"Error while writing to TUN interface: {0}.", result);
}
}
finally
{
handle.Free();
}
}