epoll经典代码示例
发布日期:2021-06-23 04:43:53
浏览次数:6
分类:技术文章
本文共 1762 字,大约阅读时间需要 5 分钟。
1. epoll原理
原理性的知识不再另做说明,我在这里附上收藏整理的两篇经典文章:
。
2. epoll服务器端经典示例
2.1 逻辑框架
2.2 代码
#include#include #include #include #include #include #include #include #include #include #include #include #include #define true 1#define false 0#define MAX_EVENT_NUMBER 1024#define BUFFER_SIZE 10/*将文件描述符设置为非阻塞*/int setnonblocking(int fd){ int old_option = fcntl(fd, F_GETFL); int new_option = old_option | O_NONBLOCK; fcntl(fd, F_SETFL, new_option); return old_option;}/*将文件描述符fd上的EPOLLIN注册到epollfd指示的epoll内核事件表中。 参数enable_et 指定是否对fd采用ET模式*/void addfd(int epollfd, int fd, int enable_et){ struct epoll_event event; event.data.fd = fd; event.events = EPOLLIN; if(enable_et){ event.events |= EPOLLET; } epoll_ctl(epollfd, EPOLL_CTL_ADD, fd, &event ); setnonblocking(fd);}/*LT 模式的工作原理*/void lt(struct epoll_event *events, int number, int epollfd, int listenfd){ char buf[BUFFER_SIZE]; int i = 0; for(i= 0;i = 0); ret = bind(listenfd, (struct sockaddr *)&address, sizeof(address)); assert(ret != -1); int opt = 1; setsockopt(listenfd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt)); ret = listen(listenfd, 5); assert(ret != -1); struct epoll_event events[MAX_EVENT_NUMBER]; int epollfd = epoll_create(5); assert(epollfd != -1); addfd(epollfd, listenfd, true); while(1){ int ret = epoll_wait(epollfd, events, MAX_EVENT_NUMBER, -1); if(ret<0){ printf("epoll failure\n"); break; } //lt(events, ret, epollfd, listenfd); et(events, ret, epollfd, listenfd); } close(listenfd); return 0;}
转载地址:https://blog.csdn.net/s2603898260/article/details/106821040 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
网站不错 人气很旺了 加油
[***.192.178.218]2024年03月31日 15时40分02秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Mac下查看、切换JDK版本及其安装目录
2019-04-27
在Mac上安装consolas字体
2019-04-27
阿里P8面试:微服务项目如何校验参数
2019-04-27
判断URL字符串是否合法
2019-04-27
图文+代码讲解带你攻克OAuth 2.0授权流程的三座大山
2019-04-27
VirtualBox添加ISO文件
2019-04-27
图文+代码带你攻克OAuth 2.0三大核心授权类型
2019-04-27
@Value注解不能注入static修饰的属性
2019-04-27
spring boot 2.x 接口返回时间类型不再自动序列化为timestamp
2019-04-27
Ubuntu Linux 创建root用户并且允许远程登录
2019-04-27
Linux shell 关于 2>&1 的含义
2019-04-27
Ubuntu Linux系统使用apt-get install安装的软件的相关位置
2019-04-27
nginx同一server配置多个前端工程location访问404问题
2019-04-27
Java 多线程与高并发
2019-04-27
第二章 Springboot 自定义banner图案
2019-04-27
第三章 Springboot 热部署
2019-04-27
Log4j格式化符号%详解
2019-04-27
Logback日志添加唯一追踪ID
2019-04-27
Spring IOC 容器源码分析
2019-04-27
Java 生成 UUID
2019-04-27