Beispiel #1
0
void Channel::handleEvent()
{
    if((pollEvent_&POLLHUP)&&!(pollEvent_&POLLIN))
    {
        if(closeCallback_) closeCallback_();
    }

    if(pollEvent_&(POLLIN|POLLPRI))
    {
        if(readCallback_) readCallback_();
    }

    if(pollEvent_&POLLOUT)
    {
        if(writeCallback_) writeCallback_();
    }
}
Beispiel #2
0
        void Channel::handleEvent()
        {
            eventHandling_ = true;
#ifndef NDEBUG
            //MDLog( "channel::handleEvent revent:%d,  %s.", revents_, reventsToString().c_str() );
#endif
            //套接字关闭了,并且没有可读数据
            if ((revents_ & POLLHUP) && !(revents_ & POLLIN)) 
            {
                if (closeCallback_) closeCallback_();
            }
            
            if (revents_ & POLLNVAL)
            {
                MDWarning( "fd = %d Channel::handle_event() POLLNVAL", fd_ );
            }

            //套接字出错了
            if (revents_ & (POLLERR | POLLNVAL))
            {
                if (errorCallback_) errorCallback_();
            }

            //数据可读 (注意windows下不支持POLLPRI和POLLRDHUP, POLLIN表示了优先级数据和普通数据的非阻塞可读)
            if (revents_ & (POLLIN | POLLPRI | POLLRDHUP))
            {
                if (readCallback_) readCallback_();
            }

            if (revents_ & POLLOUT)
            {
                if (writeCallback_) writeCallback_();
            }

            eventHandling_ = false;
        }