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

(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 系统。

谢谢

相关文章:

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

(1)经过之前的学习。俺认为结论是这样的,因为三次握手到四次挥手,到 RST 报文,都是 tcp 连接上收到了报文,这都属于读事件。所以: EPOLLIN : 包含了读事件, FIN 报文的正常四次挥手、…...

webpack传输性能优化

手动分包 基本原理 手动分包的总体思路是:先打包公共模块,然后再打包业务代码。 打包公共模块 公共模块会被打包成为动态链接库(dll Dynamic Link Library),并生成资源清单。 打包业务代码 打包时,如果…...

智能小区物业管理系统打造高效智能社区服务新生态

内容概要 随着城市化进程的不断加快,智能小区物业管理系统的出现,正逐步改变传统物业管理的模式,为社区带来了崭新的管理理念和服务方式。该系统不仅提升了物业管理效率,还加强了业主与物业之间的互动,为每位居民提供…...

(done) MIT6.S081 2023 学习笔记 (Day7: LAB6 Multithreading)

网页:https://pdos.csail.mit.edu/6.S081/2023/labs/thread.html (任务1教会了你如何用 C 语言调用汇编,编译后链接即可) 任务1:Uthread: switching between threads (完成) 在这个练习中,你将设计一个用户级线程系统中的上下文切…...

面试经典150题——栈

文章目录 1、有效的括号1.1 题目链接1.2 题目描述1.3 解题代码1.4 解题思路 2、2.1 题目链接2.2 题目描述2.3 解题代码2.4 解题思路 3、最小栈3.1 题目链接3.2 题目描述3.3 解题代码3.4 解题思路 4、逆波兰表达式求值4.1 题目链接4.2 题目描述4.3 解题代码4.4 解题思路 5、基本…...

openmv的端口被拆分为两个 导致电脑无法访问openmv文件系统解决办法 openmv USB功能改动 openmv驱动被更改如何修复

我之前误打误撞遇到一次,直接把openmv的全部端口删除卸载然后重新插上就会自动重新装上一个openmv端口修复成功,大家可以先试试不行再用下面的方法 全部卸载再重新插拔openmv 要解决OpenMV IDE中出现的两个端口问题,可以尝试以下步骤&#x…...

自制虚拟机(C/C++)(三、做成标准GUI Windows软件,扩展指令集,直接支持img软盘)

开源地址:VMwork 要使终端不弹出&#xff0c; #pragma comment(linker, "/subsystem:windows /ENTRY:mainCRTStartup") 还要实现jmp near 0x01类似的 本次的main.cpp #include <graphics.h> #include <conio.h> #include <windows.h> #includ…...

算法题(56):旋转链表

审题&#xff1a; 我们需要根据k的大小把链表向右移动对应次数&#xff0c;并返回移动后的链表的头结点指针 思路&#xff1a; 根据提示中的数据大小我们发现&#xff1a;k的值可以远大于节点数。 也就是说我们对链表的操作存在周期&#xff0c;如果k%len0&#xff0c;说明我们…...

解决PyG安装中torch-sparse安装失败问题:详细指南

1 问题描述 最近在学习GNN&#xff0c;需要使用PyTorch Geometric&#xff08;PyG&#xff09;库。在安装PyG的过程中&#xff0c;遇到了torch-sparse安装失败的问题&#xff0c;错误提示为&#xff1a; ERROR: Failed building wheel for torch-sparse本文将详细记录问题的解…...

如何创建折叠式Title

文章目录 1 概念介绍2 使用方法3 示例代码 我们在上一章回中介绍了SliverGrid组件相关的内容&#xff0c;本章回中将介绍SliverAppBar组件.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1 概念介绍 我们在本章回中介绍的SliverAppBar和普通的AppBar类似&#xff0c;它们的…...

go-zero学习笔记(三)

利用goctl生成rpc服务 编写proto文件 // 声明 proto 使用的语法版本 syntax "proto3";// proto 包名 package demoRpc;// golang 包名(可选) option go_package "./demo";// 如需为 .proto 文件添加注释&#xff0c;请使用 C/C 样式的 // 和 /* ... */…...

Wildcard工具详解:从入门到精通

1. Wildcard基础知识 什么是Wildcard&#xff1f; Wildcard&#xff08;通配符&#xff09;是一种用于匹配文件名或字符串的特殊字符。它允许用户使用简单的符号来表示复杂的匹配规则&#xff0c;从而快速定位目标文件或数据。 常见的Wildcard符号 *&#xff1a;匹配任意数量…...

冰蝎v3.0 beta7来啦

我用了一台kali&#xff0c;一台centos&#xff0c;一台windows&#xff0c;做了一个文件上传和一个反弹shell实验&#xff0c;载荷是AES加密的&#xff0c;终于感受到了对加密流量的无可奈何~ kali&#xff08;php8.1&#xff09;centos&#xff08;php7.1&#xff09;window…...

React中使用箭头函数定义事件处理程序

React中使用箭头函数定义事件处理程序 为什么使用箭头函数&#xff1f;1. 传递动态参数2. 避免闭包问题3. 确保每个方块的事件处理程序是独立的4. 代码可读性和维护性 示例代码总结 在React开发中&#xff0c;处理事件是一个常见的任务。特别是当我们需要传递动态参数时&#x…...

记忆化搜索和动态规划 --最长回文子串为例

记忆化搜索 记忆化搜索是一种优化递归算法的方法&#xff0c;通过将已经计算过的子问题的结果存储起来&#xff08;通常使用哈希表或数组&#xff09;&#xff0c;避免重复计算相同的子问题。 本质上是通过缓存中间结果来减少计算的重复性。 动态规划 动态规划是通过将问题分…...

Tree Compass( Codeforces Round 934 (Div. 2) )

Tree Compass&#xff08; Codeforces Round 934 (Div. 2) &#xff09; You are given a tree with n n n vertices numbered 1 , 2 , … , n 1, 2, \ldots, n 1,2,…,n. Initially, all vertices are colored white. You can perform the following two-step operation: …...

【Numpy核心编程攻略:Python数据处理、分析详解与科学计算】2.17 掩码数组:缺失值处理的优雅方案

2.17 掩码数组&#xff1a;缺失值处理的优雅方案 目录 #mermaid-svg-12vjJJbyudPnkYBO {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-12vjJJbyudPnkYBO .error-icon{fill:#552222;}#mermaid-svg-12vjJJbyudPnkYBO…...

PHP 常用函数2025.02

PHP implode() 函数 语法 implode(separator,array) 参数描述separator可选。规定数组元素之间放置的内容。默认是 ""&#xff08;空字符串&#xff09;。array必需。要组合为字符串的数组。 技术细节 返回值&#xff1a;返回一个由数组元素组合成的字符串。PHP 版…...

react中如何获取dom元素

实现代码 const inputRef useRef(null) inputRef.current.focus()...

【C++】继承(下)

大家好&#xff0c;我是苏貝&#xff0c;本篇博客带大家了解C的继承&#xff08;下&#xff09;&#xff0c;如果你觉得我写的还不错的话&#xff0c;可以给我一个赞&#x1f44d;吗&#xff0c;感谢❤️ 目录 5.继承与友元6.继承与静态成员7.复杂的菱形继承及菱形虚拟继承8.继…...

gorilla/sessions深度解析:Cookie与文件系统存储实战

gorilla/sessions深度解析&#xff1a;Cookie与文件系统存储实战 【免费下载链接】sessions Package gorilla/sessions provides cookie and filesystem sessions and infrastructure for custom session backends. 项目地址: https://gitcode.com/gh_mirrors/se/sessions …...

自动驾驶中的路径规划实战:手把手教你用Python复现RRT与RRT*算法(含动态演示)

自动驾驶路径规划实战&#xff1a;Python实现RRT与RRT*算法全解析 从理论到实践的路径规划探索 在自动驾驶技术快速发展的今天&#xff0c;路径规划作为核心算法之一&#xff0c;直接决定了车辆能否安全高效地完成行驶任务。想象一下&#xff0c;当你驾驶车辆进入一个复杂的停车…...

Zotero插件生态:从翻译到效率提升的进阶配置指南

1. Zotero插件生态全景&#xff1a;从翻译到全流程优化 第一次接触Zotero时&#xff0c;我和大多数人一样&#xff0c;只是把它当作一个简单的文献管理工具。直到某天深夜赶论文&#xff0c;连续手动整理了47篇参考文献后&#xff0c;手指酸痛的我突然意识到&#xff1a;这绝对…...

Vivado项目文件太多分不清?这份FPGA开发必备的“文件后缀速查手册”请收好

Vivado项目文件管理实战指南&#xff1a;从混乱到有序的FPGA开发进阶 每次打开Vivado项目文件夹&#xff0c;看到满屏的.bat、.dcp、.xci文件是不是感觉像走进了一个迷宫&#xff1f;作为FPGA开发者&#xff0c;我们经常需要在这些看似杂乱的文件海洋中寻找特定的配置或输出结果…...

AI视频生成工具ComfyUI-WanVideoWrapper零基础配置指南

AI视频生成工具ComfyUI-WanVideoWrapper零基础配置指南 【免费下载链接】ComfyUI-WanVideoWrapper 项目地址: https://gitcode.com/GitHub_Trending/co/ComfyUI-WanVideoWrapper 还在为视频生成工具的复杂配置烦恼&#xff1f;想快速掌握AI视频创作却被技术门槛劝退&am…...

51单片机(九)—— 数码管动态扫描原理与实现

1. 数码管动态扫描原理揭秘 第一次接触多位数码管显示时&#xff0c;我盯着电路板百思不得其解&#xff1a;明明只有8个数据引脚&#xff0c;怎么能同时控制8位数码管显示不同内容&#xff1f;直到理解了动态扫描原理&#xff0c;才恍然大悟这背后的精妙设计。动态扫描本质上是…...

这次终于选对了!2026年最值得体验的专业AI论文软件

2026年AI论文写作工具已从“内容生成”进化为融合学术规范与智能优化的全流程解决方案&#xff0c;核心评价维度涵盖文献真实性、格式合规性、长文本逻辑、查重降重、AIGC合规等关键指标。本次测评覆盖6款主流工具&#xff0c;涵盖中英文、全流程与专项功能、免费与付费版本&am…...

Linux下安装SimSun字体的完整指南(附常见问题排查)

Linux下安装SimSun字体的完整指南&#xff08;附常见问题排查&#xff09; 在Linux系统中处理中文字体一直是个让开发者头疼的问题。不同于Windows系统预装了丰富的中文字体&#xff0c;大多数Linux发行版默认只包含基础的字体库。当我们需要处理中文文档、开发中文界面或运行某…...

数据库字段ip地址varbinary、inet6_aton()、inet6_ntoa()等

文章目录准备数据inet6_aton()、 inet6_ntoa()其他函数为什么ip地址要用varbinary(16)?其他文档这里主要说下mysql的varbinary字段类型。准备数据 CREATE TABLE user_logs (id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,ip VARBINARY(16) NOT NULL COMMENT 存储IPv4/IPv6地…...

OpenClaw故障排查指南:GLM-4.7-Flash模型连接常见问题解决

OpenClaw故障排查指南&#xff1a;GLM-4.7-Flash模型连接常见问题解决 1. 为什么需要这份指南 上周我在本地部署GLM-4.7-Flash模型时&#xff0c;连续遭遇了三次连接失败。每次错误提示都像谜语一样——"Connection timeout"、"Invalid response"这些报错…...