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

  • 默认:水平触发模式 - 根据读来解释
    • 只要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();
      }
上一篇:从零开始实现TinyWebServer


下一篇:谈谈Linux网络编程