code: func wait(epfd, eventfd int, timeout time.Duration) (bool, error) {
  	events := make([]unix.EpollEvent, numFdEvents+1)
  	timeoutMS := int(timeout / time.Millisecond)
  	n, err := unix.EpollWait(epfd, events, timeoutMS)
  	if n == -1 {
  		if err == unix.EINTR {
  			// Interrupt, ignore the error
  			return false, nil
  		}
  		return false, err
  	}
  	if n == 0 {
  		// Timeout
  		return false, nil
  	}
  	if n > numFdEvents {
  		return false, fmt.Errorf("epoll_wait returned more events than we know what to do with")
  	}
  	for _, event := range events[:n] {
  		if event.Fd == int32(eventfd) {
  			if event.Events&unix.EPOLLHUP != 0 || event.Events&unix.EPOLLERR != 0 || event.Events&unix.EPOLLIN != 0 {
  				// EPOLLHUP: should not happen, but if it does, treat it as a wakeup.
  
  				// EPOLLERR: If an error is waiting on the file descriptor, we should pretend
  				// something is ready to read, and let unix.Read pick up the error.
  
  				// EPOLLIN: There is data to read.
  				return true, nil
  			}
  		}
  	}
  	// An event occurred that we don't care about.
  	return false, nil
  }
docs: // wait waits up to notifierRefreshInterval for an event on the Epoll FD for the
  // eventfd we are concerned about.  It returns an error if one occurrs, and true
  // if the consumer should read from the eventfd.