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; }
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; }