epoll触发事件的分析
- EPOLLIN:套接字可读
- EPOLLOUT:套接字可写
- EPOLLRDHUP:对端关闭了套接字,或者对端关闭了写
- EPOLLPRI:套接字上有紧急数据到达
- EPOLLHUP:对端挂断了套接字
- 监听套接字上有连接到达时,监听套接字上将触发EPOLLIN(可读)事件;
- 连接套接字上有数据到达时,套接字上将触发EPOLLIN(可读)事件;
- 如果对端发送数据后立即关闭套接字或shutdown写,则本端在收到最后一个数据包时会触发EPOLLIN+EPOLLRDHUP事件;
- 对端按ctr+c杀死进程时,本端的套接字上将触发EPOLLIN+EPOLLRDHUP事件;
- 对端shutdown写,本端的套接字上触发EPOLLIN+EPOLLRDHUP事件;
- 本端调用shutdown关闭写,本端的套接字上不产生事件;
- 对端shutdown读,本端的套接字上不触发任何事件;
- 本端调用shutdown关闭读,本端的套接字上将触发EPOLLIN+EPOLLRDHUP事件;
- 对端shutdown读写,本端的套接字上触发EPOLLIN+EPOLLRDHUP事件;
- 本端shutdown读写,本端的套接字上触发EPOLLIN+EPOLLHUP+EPOLLRDHUP事件;
- 当关闭(close)套接字时,内核会自动将套接字描述符从epoll中删除,因此本端不会再触发任何事件;
- 当对端关闭(close)套接字(该套接字只被一个进程引用)时,其效果与shutdown读写一样,本端的套接字上触发EPOLLIN+EPOLLRDHUP事件;
- 当对端关闭(close)或shutdown写后,本端的套接字上触发EPOLLIN+EPOLLRDHUP事件,并且这两个事件将一直存在epoll中。也就是说,在水平触发模式下,只要对端shutdown或关闭套接字了,本端就会不断触发EPOLLIN+EPOLLRDHUP事件。另外如果是边沿触发模块,如果该套接字上后续再有其他事件触发,这两个事件也会一起触发。
- 在调用close关闭套接字时,如果该套接字描述符在内核中的引用计数为1,内核将shutdown读写,如果如果该套接字描述符在内核中的引用计数大于1(比如创建一个套接字后又fork出一个子进程),close只是递减引用计数后立即返回,这样另一个进程还可以继续使用这个套接字。这种情况下,如果要关闭这条连接,应当调用shutdown,此时会给对端发送FIN信号。
- 如果对端已close套接字(或shutdown了读写),本端继续在这个套接字上发送数据,虽然数据可以正常发送出去,但本端会收到对端发来的RST信号,从而触发本端的EPOLLIN+EPOLLRDHUP+EPOLLHUP+EPOLLERR事件。
- 对端shutdown写,本端会触发EPOLLIN+EPOLLRDHUP事件,如果本端继续在套接字上发送数据,则可以正常发送,对端也可以正常接收(即对端触发EPOLLIN信号)。
- 对端shutdown读,对端自身会触发EPOLLIN+EPOLLRDHUP事件,但本端不会触发任何事件。如果对端已shutdown读,当本端继续在这个套接字上发送数据时,数据可以正常发送出去,对端则会触发EPOLLIN+EPOLLRDHUP事件,当然,如果对端愿意,仍然可以读取到这些数据。
- 对端不管是close套接字,还是shutdown写,本端触发的都是EPOLLIN+EPOLLRDHUP事件,因此,本端无从区分对端是close了套接字,还是shutdown了写。但有一点可以区分,如果对端是close了套接字,则本端在套接字上发送数据时,本端会收到对端发来的RST报文从而本端会触发EPOLLIN+EPOLLRDHUP+EPOLLHUP+EPOLLERR事件;而如果对端只是shutdown了写,则本端可以正常发送数据不会触发任何信号。
- 在边沿触发模式下,当套接字上有数据到达时,将触发套接字上的EPOLLIN(即可读事件)1次,如果此时不去读该套接字上的数据并且套接字上没有新的报文到达,则后续不会再触发EPOLLIN事件。相反,在水平模式下,如果不去读,则该套接字上会不断触发EPOLLIN事件)。但是,如果套接字上再次有数据到达时,不管之前的数据有没有去读取,都会再次触发EPOLLIN事件。也就是说,在边沿触发模式下,每次有新数据到达时都会触发EPOLLIN事件。
- 在边沿触发模式下,如果对端关闭套接字(或shutdown写),则不管之前套接字上的数据是否读取完毕,都会触发该套接字上的EPOLLIN+EPOLLRDHUP事件。
epoll触发事件的分析相关推荐
- Epoll触发事件的类型(转载)
很Amazing,客服端关闭(close)居然不是触发epoll的EPOLLHUP事件,结果找了老半天的错误,记录一下.为此警惕自己,不能相信直觉,一切从文档出发. 以下内容均为转载(后面给出了原文的 ...
- java鼠标js触发事件吗,JavaScript常见鼠标事件与用法分析
摘要:这篇JavaScript栏目下的"JavaScript常见鼠标事件与用法分析",介绍的技术点是"JavaScript.鼠标事件.鼠标.事件.用法.分析", ...
- WEB前端 -- 下拉框的触发事件分析(onchange、onfocus、onclick)
select的onChange事件问题解决 (onchange.onfocus.onclick.onmousedown) 一.onChange事件只有在值改变时才可触发,所以必须在每一次选择时(尤其第 ...
- html 按下和松开事件,利用JQuery实现一个键盘按下与松开触发事件
利用JQuery实现一个键盘按下与松开触发事件 发布时间:2020-11-09 16:14:22 来源:亿速云 阅读:105 作者:Leah 这期内容当中小编将会给大家带来有关利用JQuery实现一个 ...
- oracle gc chain,ORACLE GC 类等待事件汇总分析
ORACLE GC 类等待事件汇总分析 作者简介: ---------------------------------------------------------------------- @ 孙 ...
- html select 选中触发,实现select中指定option选中触发事件
我们在用到下拉列表框select时,需要对选中的 选项触发事件,其实本身没有触发事件方法,我们只有在select里的onchange方法里触发. 当我们触发select的双击事件时,用ondblcli ...
- 浅谈安全管理平台中的事件关联分析
在当今社会中,随着信息技术的迅猛发展,企业内部的网络环境正面临着复杂多变的信息安全问题.这里既有来自于互联网对企业内网的各种入侵和攻击威胁,也有来自于企业内网中的违规操作和信息泄漏.为了应对层出不究的 ...
- html 输入框输入事件,input 输入框内的输入事件详细分析
1.基础:本次分析原理就是在各个浏览器下input内容变化的时候触发事件的各种不兼容性.在ie下用onpropertychange事件,在其他浏览器里用input事件. 2.用例:对每个浏览器分别测试 ...
- Android笔记:触摸事件的分析与总结----多点触控
其他相关博文: Android笔记:触摸事件的分析与总结----MotionEvent对象 Android笔记:触摸事件的分析与总结----TouchEvent处理机制 An ...
最新文章
- ethereumjs/ethereumjs-vm-2-API文档
- 进来在看《How Tomcat Works》这本书,将读书笔记贴在这里,好记性不如烂笔头。
- writeValueAsString封装成工具类
- Win10不能使用Genymotion模拟器的解决方案
- phoenix+hbase+Spark整合,Spark处理数据操作phoenix入hbase,Spring Cloud整合phoenix
- 线性回归模型算法原理及Python实现
- Java集合性能分析-疯狂Java讲义
- python flask框架优点_python之全栈(Flask框架)
- sharepoint 在Visual Studio设置其他页面的加载标签
- 计算机网络系统juniper
- 虞老师在PRCV2021的Talk-Neural Human Reconstruction:From Rendering to Modeling
- Qt开发——图片缩放简述
- 解决iText 5.0.1生成pdf,加入iTextAsian.jar 出现异常 Font 'STSong-Light' with 'UniGB-UCS2-H'...
- 百度智能云BCC云服务器释放实例
- 使用cloud studio建立免费的云主机
- 腾讯T3大牛亲自教你!2021大厂Android面试经验,经典好文
- NAACL2021 信息抽取与少/零样本相关论文整理
- python发邮件附件_python 发送带附件的邮件
- 【疯壳·无人机开发教程1】开源编队无人机-开机测试
- 利用hfs工具上传文件的操作教程