epoll三种工作模式
水平触发模式-根据读来解释 只要fd对应的缓冲区有数据 epoll_wait返回 返回的次数与发送数据的次数没有关系 epoll默认的工作模式 边沿触发模式 - ET fd - 默认阻塞属性 客户端给server发数据: 发一次数据server 的 epoll_wait返回一次 不在乎数据是否读完 如果读不完, 如何全部读出来? while(recv()); 数据读完之后recv会阻塞 解决阻塞问题 设置非阻塞 - fd 边沿非阻塞触发 效率最高 如何设置非阻塞 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(): } epoll_wait 调用次数越多, 系统的开销越大 水平触发模式 #include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <sys/types.h> #include <string.h> #include <sys/socket.h> #include