docs: def _can_allocate(struct):
      """ Checks that select structs can be allocated by the underlying
      operating system, not just advertised by the select module. We don't
      check select() because we'll be hopeful that most platforms that
      don't have it available will not advertise it. (ie: GAE) """
      try:
          # select.poll() objects won't fail until used.
          if struct == 'poll':
              p = select.poll()
              p.poll(0)
  
          # All others will fail on allocation.
          else:
              getattr(select, struct)().close()
          return True
      except (OSError, AttributeError) as e:
          return False