首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >使用epoll&socket的总结

使用epoll&socket的总结

作者头像
知然
发布于 2018-03-09 08:20:12
发布于 2018-03-09 08:20:12
1.1K0
举报
文章被收录于专栏:H2CloudH2Cloud

1. epoll 中使用et方式触发,只需EPOLL_CTL_ADD一次,把EPOLLIN  EPOLLOUT 事件全注册,每个socket只需创建add一次,其事件就会

     一直在epoll中,当然,socketclose 后应DEL掉。

2. ET触发方式是指当fd到状态发生变化时通知,如read buffer从无到有,write buffer从满到不满才会通知。

3. 若要将accept的文件描述符添加到epoll,那么同样需要将socket设置为nonblock,调用accept时要循环读,直到EWOULDBLOCK发生。

4. socket 无论是read/write事件,均需要循环读,知道EWOULDBLOCK发生。

5. accept 触发too many open file 时,accept到buffer已满,若close掉一些socket,仍然不能接受新连接,参见第2条,所以需要调用EPOLL_CTL_MOD重新触发accept事件,还一个简单方案,监听用到fd注册epoll是使用LT触发。

示例代码:

https://ffown.googlecode.com/svn/trunk

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2011-12-25 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
epoll使用具体解释(精髓)
在linux的网络编程中,非常长的时间都在使用select来做事件触发。在linux新的内核中,有了一种替换它的机制,就是epoll。 相比于select,epoll最大的优点在于它不会随着监听fd数目的增长而减少效率。由于在内核中的select实现中,它是採用轮询来处理的,轮询的fd数目越多,自然耗时越多。而且,在linux/posix_types.h头文件有这种声明:
全栈程序员站长
2021/12/23
5730
epoll入门
epoll用到的所有函数都是在头文件sys/epoll.h中声明的,下面简要说明所用到的数据结构和函数: 所用到的数据结构 typedef union epoll_data { void *ptr; int fd; __uint32_t u32; __uint64_t u64; } epoll_data_t; struct epoll_event { __ui
李海彬
2018/03/22
8980
朴素、Select、Poll和Epoll网络编程模型实现和分析——Epoll模型
        在阅读完《朴素、Select、Poll和Epoll网络编程模型实现和分析——Select模型》和《朴素、Select、Poll和Epoll网络编程模型实现和分析——Poll模型》两篇文章后,我们发现一个问题,不管select函数还是poll函数都不够智能,它们只能告诉我们成功、失败或者超时。如果成功,我们需要遍历整个数组去检查哪些socket需要被处理。对于性能有严格要求的服务器来说,这种浪费的行为是不可容忍的。而本文介绍的Epoll模型就完美的解决了这个问题。(转载请指明出于breaksoftware的csdn博客)
方亮
2019/01/16
8550
epoll LT 模式和 ET 模式详解(文末赠书)
与 poll 的事件宏相比,epoll 新增了一个事件宏 EPOLLET,这就是所谓的边缘触发模式(Edge Trigger,ET),而默认的模式我们称为 水平触发模式(Level Trigger,LT)。这两种模式的区别在于:
范蠡
2020/06/01
12K0
select和epoll模型
转自https://www.cnblogs.com/lojunren/p/3856290.html
大学里的混子
2019/03/14
1.2K0
《Linux高性能服务器编程》学习小结(1)
TCP客户端 // 定义 _GNU_SOURCE 是为了获得对 EPOLLRDHUP 即 TCP链接被对方关闭或者对方关闭了写操作的 这一事件类型的支持 #define _GNU_SOURCE 1 // 下面是系统调用需要依赖的头文件 #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <assert.h> #include <stdio.h> #inc
wanyicheng
2021/01/31
2.9K0
Epoll 机制
epoll 是poll系统调用的升级版。可以用做单边沿(level-triggered)和双边沿(edge-triggered)的两种工作模式,同样也可以用于检测多个文件描述符。
DragonKingZhu
2020/03/24
7230
探索Reactor网络模型在当今应用领域的革新
reactor是将对IO的检测转换为对事件的处理,是一种异步事件机制。reactor会使用IO多路复用进行IO检测,IO多路复用器一般是:select、poll、epoll。 reactor大致逻辑: (1)socket()创建一个套接字,listenfd; (2)bind()、listen()配置listenfd,绑定和监听; (3)listenfd注册读事件,交由epoll管理 (4)读事件触发,回调accept (5)客户端连接clientfd组成读事件 (6)相关事件调用相关回调函数
Lion 莱恩呀
2024/08/18
2030
探索Reactor网络模型在当今应用领域的革新
Linux IO多路复用模型
流指的是可以进行I/O操作的内核对象,例如: 文件,管道和套接字等,流的入口就是文件描述符fd。
大忽悠爱学习
2022/09/29
9020
Linux IO多路复用模型
用C写一个web服务器(二) I/O多路复用之epoll
枕边书
2018/01/04
9710
用C写一个web服务器(二) I/O多路复用之epoll
高性能网络设计秘笈:深入剖析Linux网络IO与epoll
epoll是Linux操作系统中的一种可扩展的I/O事件通知机制,用于处理大量并发连接的网络编程场景。它在高性能网络服务器的开发中非常有用,因为它可以有效地管理大量的文件描述符,监视并等待这些文件描述符上的事件,并在事件发生时通知应用程序进行相应的处理。
Lion 莱恩呀
2024/08/11
2440
高性能网络设计秘笈:深入剖析Linux网络IO与epoll
epoll()函数总结
http://www.cnblogs.com/Anker/archive/2013/08/17/3263780.html
bear_fish
2018/09/20
2K0
epoll()函数总结
聊聊BIO,NIO和AIO (1)到底什么是“IO Block”BIONIOIO多路复用用epoll实现的IO多路复用epoll的优势水平触发和边沿触发再来思考一下什么是“Block”总结
本文从操作系统的角度来解释BIO,NIO,AIO的概念,含义和背后的那些事。本文主要分为3篇。 第一篇讲解BIO和NIO以及IO多路复用 第二篇讲解AIO和文件IO 第三篇讲解在这些机制上的一些应用的实现方式,比如nginx,nodejs,Java NIO等 到底什么是“IO Block” 很多人说BIO不好,会“block”,但到底什么是IO的Block呢?考虑下面两种情况: 用系统调用read从socket里读取一段数据 用系统调用read从一个磁盘文件读取一段数据到内存 如果你的直觉告诉你,这两种都算
大宽宽
2018/05/14
1.9K1
IO多路转接技术 | poll/epoll详解
epoll_data_t是一个联合体union,四个成员共用同一块内存,也就是说四个成员我们只能用一个,一般情况下我们用fd,这个fd实际上就是epoll_ctl()函数的第三个参数fd。
mindtechnist
2025/05/05
1290
IO多路转接技术 | poll/epoll详解
socket的epollin/epollout是何时触发的
本篇文章的问题是,在 EPOLLET 模式下,socket的 EPOLLIN 和 EPOLLOUT 是何时触发的?
KINGYT
2019/08/06
6.5K0
IO复用(Reactor模式和Preactor模式)——用epoll来提高服务器并发能力
上篇线程/进程并发服务器中提到,提高服务器性能在IO层需要关注两个地方,一个是文件描述符处理,一个是线程调度。 IO复用是什么?IO即Input/Output,在网络编程中,文件描述符就是一种IO操作。 为什么要IO复用? 1.网络编程中非常多函数是阻塞的,如connect,利用IO复用可以以非阻塞形式执行代码。 2.之前提到listen维护两个队列,完成握手的队列可能有多个就绪的描述符,IO复用可以批处理描述符。 3.有时候可能要同时处理TCP和UDP,同时监听多个端口,同时处理读写和连接
Aichen
2018/05/18
2.1K0
linux网络编程系列(九)--epoll的基本使用
完全靠内核驱动,只要某个文件描述符有变化,就会一直通知我们的应用程序,直到处理完毕为止。
cpp加油站
2021/04/16
8300
linux网络编程系列(九)--epoll的基本使用
【计算机网络】epoll
首先 epoll_create() 这个接口就是帮我们创建一个 epoll 模型,这个模型是什么我们后面介绍原理的时候再讲。
YoungMLet
2024/04/09
1430
【计算机网络】epoll
Linux下的I/O复用与epoll详解
I/O多路复用有很多种实现。在linux上,2.4内核前主要是select和poll,自Linux 2.6内核正式引入epoll以来,epoll已经成为了目前实现高性能网络服务器的必备技术。尽管他们的使用方法不尽相同,但是本质上却没有什么区别。本文将重点探讨将放在EPOLL的实现与使用详解。
用户7678152
2020/09/16
2.2K0
linux网络编程之socket(十三):epoll 系列函数简介、与select、poll 的区别
一、epoll 系列函数简介 #include <sys/epoll.h> int epoll_create(int size); int epoll_create1(int flags); i
s1mba
2017/12/28
2.3K0
推荐阅读
相关推荐
epoll使用具体解释(精髓)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档