private long Wait()
        {
            // Wait for the next timer event. If we have missed any the number is written to "missed"
            byte[] buf     = new byte[8];
            var    handle  = GCHandle.Alloc(buf, GCHandleType.Pinned);
            IntPtr pointer = handle.AddrOfPinnedObject();
            int    ret     = LinuxInterop.read(this.fileDescriptor, pointer, buf.Length);
            // ret = bytes read
            long missed = Marshal.ReadInt64(pointer);

            handle.Free();

            if (ret < 0)
            {
                throw new Exception($"Error in read = {ret}");
            }

            return(missed);
        }