void Channel::handleEvent() { if((pollEvent_&POLLHUP)&&!(pollEvent_&POLLIN)) { if(closeCallback_) closeCallback_(); } if(pollEvent_&(POLLIN|POLLPRI)) { if(readCallback_) readCallback_(); } if(pollEvent_&POLLOUT) { if(writeCallback_) writeCallback_(); } }
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; }