首页 > 编程语言 > 详细

Linux c++(socket网络通信 & epoll的三种模式)

时间:2021-05-10 13:18:24      阅读:14      评论:0      收藏:0      [点我收藏+]
  • 默认:水平触发模式 - 根据读来解释
    • 只要fd对应的缓冲区有数据
    • epoll_wait返回
    • 返回的次数与发送数据的次数没有关系
    • epoll默认的工作模式
  • ET: 边沿触发模式
    • 客户端给server发数据
      • 发一次数据server的epoll——wait返回一次
      • 不在乎诗句是否读完
                  // 将新的到的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);
    • 将缓冲区的全部数据读出
      while(recv() > 0)
      {
        printf();
      }

Linux c++(socket网络通信 & epoll的三种模式)

原文:https://www.cnblogs.com/lodger47/p/14750439.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!