当前位置: 首页 > article >正文

(9) 上:学习与验证 linux 里的 epoll 对象里的 EPOLLIN、 EPOLLHUP 与 EPOLLRDHUP 的不同

(1)经过之前的学习。俺认为结论是这样的,因为三次握手到四次挥手,到 RST 报文,都是 tcp 连接上收到了报文,这都属于读事件。所以:
EPOLLIN : 包含了读事件, FIN 报文的正常四次挥手、还有 RST 报文的连接突然中断的情形(已经连接上的 tcp 连接,即使被突然关闭, tcp 协议也会让被关闭的套接字再发送最后一条报文,就是 RST 报文)。这个结论的支撑,来自于 wireshark 的抓包观测:

在这里插入图片描述

EPOLLRDHUP : 对应 FIN 报文的正常的四次挥手的 tcp 连接关闭。这时候,在现代的 linux 内核里,也同时保留了 EPOLLIN 事件。

EPOLLHUP : 若客户端没有调用 close(套接字),就关闭了, tcp 协议会发送一条 RST 报文给服务器。 服务器上的 epoll 对象会感知到这个事件,且事件类型是 EPOLLHUP 与 EPOLLIN 。一会会编写小例子来验证。弄清这些知识很重要,可以让咱们安心的写出稳定的通信代码。

以上关于 RST 报文的 tcp 协议方面的支撑如下

在这里插入图片描述

++ 进程退出,要关闭自己打开的所有文件,可能触发了 ABORT 请求,该请求启动了 tcp_drop( )函数 :

在这里插入图片描述

++ tcp_drop()函数会触发 RST 报文的发送, tcp_close()函数会清除本主机上被关闭套接字具有的所有内存,也就没有此套接字了

在这里插入图片描述

++ 以及:

在这里插入图片描述

++ 但是,如下图, close( ) 函数触发的四次挥手 , FIN 报文,对应 DETACH 请求,走的是不一样的代码逻辑

在这里插入图片描述

++ 以及:

在这里插入图片描述

(2) 接着先整理一下某心一言里的教导与答案

在这里插入图片描述

++ 以及:

在这里插入图片描述

++ 以及:

在这里插入图片描述

++以及:

在这里插入图片描述

++ 所有的事件,都离不开系统的读函数 read(),再补充一下 read()函数的返回值:

在这里插入图片描述
在这里插入图片描述

(3) 上面的一言的解答已经很清楚了。谢谢一言。下篇文章里编写小例子测试一下,上 ubantu 系统。

谢谢


http://www.kler.cn/a/528862.html

相关文章:

  • 《解锁AI黑科技:数据分类聚类与可视化》
  • C++ 中的类(class)和对象(object)
  • Python3 【闭包】项目实战:5个新颖的学习案例
  • p1044 栈
  • 全程Kali linux---CTFshow misc入门(25-37)
  • 开源的瓷砖式图像板系统Pinry
  • 深入剖析C语言字符串操作函数:my_strlen与my_strcpy
  • 【问题记录】DeepSeek本地部署遇到问题
  • Python-列表
  • HTB:LinkVortex[WriteUP]
  • STM32 AD多通道
  • 一文讲解Java中的ArrayList和LinkedList
  • 【Convex Optimization Stanford】Lec4 CVX-opt-promblem
  • os开发基础知识(1)
  • 计算机视觉:解锁智能时代的钥匙与实战案例
  • .Net WebAPI -[HttpPut(“{fileServiceId:int}“)]
  • 【数据结构】_时间复杂度相关OJ(力扣版)
  • 使用Visual Studio打包Python项目
  • 北京门头沟区房屋轮廓shp的arcgis数据建筑物轮廓无偏移坐标测评
  • 【机器学习】自定义数据集 使用scikit-learn中svm的包实现svm分类
  • RK3568使用QT操作LED灯
  • 2025年1月22日(网络编程 udp)
  • 动手学强化学习(四)——蒙特卡洛方法
  • vue之pinia组件的使用
  • AtCoder Beginner Contest 391(ABCDE)
  • Alibaba开发规范_编程规约之命名风格