epoll经典代码示例
发布日期:2021-06-23 04:43:53 浏览次数:6 分类:技术文章

本文共 1762 字,大约阅读时间需要 5 分钟。

在这里插入图片描述

1. epoll原理

原理性的知识不再另做说明,我在这里附上收藏整理的两篇经典文章:

2. epoll服务器端经典示例

2.1 逻辑框架

epoll处理框架

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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:关于杭州的点点
下一篇:set map list 之间的关联关系

发表评论

最新留言

网站不错 人气很旺了 加油
[***.192.178.218]2024年03月31日 15时40分02秒