Linux c++(socket网络通信 & epoll的三种模式)
作者:互联网
- 默认:水平触发模式 - 根据读来解释
- 只要fd对应的缓冲区有数据
- epoll_wait返回
- 返回的次数与发送数据的次数没有关系
- epoll默认的工作模式
- ET: 边沿触发模式
- 客户端给server发数据
- 发一次数据server的epoll——wait返回一次
- 不在乎诗句是否读完
- 客户端给server发数据
// 将新的到的cfd挂到树上
struct epoll_event temp;
// 设置边沿触发
temp.events = EPOLLIN | EPOLLET;
temp.data.fd = cfd;
epoll_ctl(epfd,EPOLL_CTL_ADD,cfd,&temp);
- 边沿非阻塞触发
- 效率最高
- 如何设置非阻塞
- open()
- 设置flags
- 必须O_WDRW|O_NONBLOCK
- 终端文件: /dev/tty
- fcntl
- int flag = fcntl(fd,F_GETFL);
- flag |=O_NONBLOCK;
- fcntl(fd,F_SETFL,flag);
- open()
- 将缓冲区的全部数据读出
while(recv() > 0)
{
printf();
}
标签:fcntl,socket,temp,epoll,cfd,c++,flag,fd 来源: https://www.cnblogs.com/lodger47/p/14750439.html