Exemple #1
0
Timestamp EPoll::poll(int timeoutMs, ChannelList* activeChannels)
{
	std::cout<<"poll "<<epollfd_<<" "<<events_.size()<<std::endl;
  int numEvents = ::epoll_wait(epollfd_,
                               &events_[0],
                               static_cast<int>(events_.size()),
                               timeoutMs);
  Timestamp now = Now();
  int savedErrno = errno;
  if (numEvents > 0)
  {
    fillActiveChannels(numEvents, activeChannels,now);
  }
  else if (numEvents == 0)
  {
    std::cout<<"nothing happended";
  }
  else
  {
    // error happens, log uncommon ones
    if (savedErrno != EINTR)//非timeout
    {
      errno = savedErrno;
	  std::cout <<"EPoll::poll" <<strerror(errno)<<std::endl;
    }
  }
  return now;
}
Exemple #2
0
TimeStamp EPoller::Poll(int nTimeoutMs, ChannelList* pActiveChannels) {
	int nNumEvents = epoll_wait(m_nEpollFd
									, &*m_vEvents.begin()
									, static_cast<int>(m_vEvents.size())
									, nTimeoutMs);

	TimeStamp now(TimeStamp::Now());
	if (nNumEvents > 0) {
		LOG_TRACE << nNumEvents << " events happends";
		fillActiveChannels(nNumEvents, pActiveChannels);
		if (static_cast<size_t>(nNumEvents) == m_vEvents.size()) {
			m_vEvents.resize(2 * m_vEvents.size());
		}
	} else if (0 == nNumEvents) {
		LOG_TRACE << "no event";
	} else {
		LOG_SYSERR << "epoll wait err";
	}

	return now;
}