epoll边缘模式收数据学习
1、概述
下面问题你会怎么回答?
1、epoll边缘模式收数据,如何表明数据收完了?收完的标志是什么?
2、epoll边缘模式收数据代码怎么写
2、分析
1、epoll边缘模式收数据,如何表明数据收完了?收完的标志是什么?
如果使用epoll边缘模式检测数据是否可读,当读事件触发时,一定要一次性把socket上数据读完,也就是说一定要循环调用recv直到报错,并且错误码为EWOULDBLOCK(此时说明socket上本次数据读完了)。
2、epoll边缘模式收数据代码怎么写
bool MyNetWork::HandleRecvEtMode()
{char buff[256];while (true){ int nRecv = ::recv(clientfd_, buff, 256, 0);if (nRecv == -1){if (errno == EWOULDBLOCK)return true;else if (errno == EINTR)continue;return false;}else if (nRecv == 0){//对端关闭了socketreturn false; }inputBuffer_.add(buff, (size_t)nRecv);}return true;
}
学习链接:https://github.com/0voice