code: func (e *Epoller) Wait() error {
  	events := make([]unix.EpollEvent, maxEvents)
  	for {
  		n, err := unix.EpollWait(e.efd, events, -1)
  		if err != nil {
  			// EINTR: The call was interrupted by a signal handler before either
  			// any of the requested events occurred or the timeout expired
  			if err == unix.EINTR {
  				continue
  			}
  			return err
  		}
  		for i := 0; i < n; i++ {
  			ev := &events[i]
  			// the console is ready to be read from
  			if ev.Events&(unix.EPOLLIN|unix.EPOLLHUP|unix.EPOLLERR) != 0 {
  				if epfile := e.getConsole(int(ev.Fd)); epfile != nil {
  					epfile.signalRead()
  				}
  			}
  			// the console is ready to be written to
  			if ev.Events&(unix.EPOLLOUT|unix.EPOLLHUP|unix.EPOLLERR) != 0 {
  				if epfile := e.getConsole(int(ev.Fd)); epfile != nil {
  					epfile.signalWrite()
  				}
  			}
  		}
  	}
  }
docs: // Wait starts the loop to wait for its consoles' notifications and signal
  // appropriate console that it can perform I/O.