def pollfds
      ppPollfds = Call.libusb_get_pollfds(@ctx)
      return nil if ppPollfds.null?
      offs = 0
      pollfds = []
      while !(pPollfd=ppPollfds.get_pointer(offs)).null?
        pollfd = Call::Pollfd.new pPollfd
        pollfds << Pollfd.new(pollfd[:fd], pollfd[:events])
        offs += FFI.type_size :pointer
      end
      if Call.respond_to?(:libusb_free_pollfds)
        Call.libusb_free_pollfds(ppPollfds)
      else
        Stdio.free(ppPollfds)
      end
      pollfds
    end
def pollfds
      ppPollfds = Call.libusb_get_pollfds(@ctx)
      return nil if ppPollfds.null?
      offs = 0
      pollfds = []
      while !(pPollfd=ppPollfds.get_pointer(offs)).null?
        pollfd = Call::Pollfd.new pPollfd
        pollfds << Pollfd.new(pollfd[:fd], pollfd[:events])
        offs += FFI.type_size :pointer
      end
      if Call.respond_to?(:libusb_free_pollfds)
        Call.libusb_free_pollfds(ppPollfds)
      else
        Stdio.free(ppPollfds)
      end
      pollfds
    end
Retrieve a list of file descriptors that should be polled by your main
 loop as libusb event sources.

 As file descriptors are a Unix-specific concept, this function is not
 available on Windows and will always return +nil+.

 @return [Array<Pollfd>]  list of Pollfd objects,
   +nil+ on error,
   +nil+ on platforms where the functionality is not available