一个没正常处理tcp对端关闭的bug
最近使用自研的http client时发现一个问题,对端在发送响应数据之后立即调用close关闭了连接,我这没有调用到响应的回调,而是调用到了连接关闭的回调。对端延迟一会再关闭连接就没问题,用curl去访问也是正常的。经过排查是没有正确处理对端关闭导致的。
根据gnu文档以及其他搜索结果,如果没通过SO_LINGER选项改变close的默认行为,调用close关闭socket时,会关闭两个方向的数据流。读方向上,内核会将套接字设置为不可读,任何读操作都会返回异常;写方向上,内核会尝试将发送缓冲区的数据发送,之后发送FIN包结束连接,这个过程中,往套接字写入数据都会返回异常;若对端还发送数据过来,会返回一个RST报文。
epoll触发EPOLLIN事件时,表示对应的连接上有数据可以读出。tcp连接的远端主动关闭连接,也相当于可读事件,因为需要处理发送来的FIN包。
有问题的接收代码如下,问题在于recv返回0时,没有处理已经收到的数据就直接关闭socket。
int tcp_event::handle_read()
{octets& read_buf = _ses->get_read_buf();int ret_bytes = 0;while(true){if(read_buf.full()){_ses->onrecv();}int bytes_cnt = recv(_fd, read_buf.end(), read_buf.free_space(), 0);if(bytes_cnt == 0){_ses->close(CLOSE_REASON_ONRECV);return -1;}else if(bytes_cnt != -1){ret_bytes += bytes_cnt;read_buf.resize(read_buf.size() + bytes_cnt);}else{if(errno == EAGAIN || errno == EWOULDBLOCK) break;if(errno == EINTR) continue;_ses->close(CLOSE_REASON_ONRESET);return -1;}}_ses->onrecv();return ret_bytes;
}
相关文章:
一个没正常处理tcp对端关闭的bug
最近使用自研的http client时发现一个问题,对端在发送响应数据之后立即调用close关闭了连接,我这没有调用到响应的回调,而是调用到了连接关闭的回调。对端延迟一会再关闭连接就没问题,用curl去访问也是正常的。经过排查是没有正确…...
什么是JDK
JDK是Java的开发工具,全称为Java Development Kit,包含Java运行环境,Java工具,Java基础类库三大部分。 Java运行环境 Java运行环境,也就是JRE,全称为Java Runtime Environment ,其中包含JVM&…...
积分表二(高等数学同济版中所有的积分公式)
文章目录 含有 x − a x a \sqrt{\pm \frac{x-a}{xa}} xax−a 或者 ( x − a ) ( b − x ) \sqrt{(x-a)(b-x)} (x−a)(b−x) 的积分含有三角函数函数的积分含有反三角函数的积分 (其中 a > 0 a>0 a>0)含有指数函数的积分含有对数函数的积分含有双曲函数的…...
Golang数据类型(数字型)
Go数据类型(数字型) Go中数字型数据类型大致分为整数(integer)、浮点数(floating point )和复数(Complex)三种 整数重要概念 整数在Go和Python中有较大区别,主要体现在…...
【JVM系列】- 穿插·对象的实例化与直接内存
对象的实例化与直接内存 😄生命不息,写作不止 🔥 继续踏上学习之路,学之分享笔记 👊 总有一天我也能像各位大佬一样 🌝分享学习心得,欢迎指正,大家一起学习成长! 文章目录…...
【C++干货铺】继承 | 多继承 | 虚继承
个人主页点击直达:小白不是程序媛 C系列专栏:C干货铺 代码仓库:Gitee 目录 继承的概念及定义 继承的概念 继承的定义 继承基类成员访问方式的变化 基类和派生类的赋值转化 继承中的作用域 派生类的默认成员函数 构造函数 拷贝构造…...
【ARM CoreLink 系列 8.1 -- SMMU 详细介绍-STE Entry 详细介绍 1】
请阅读【ARM CoreLink 文章专栏导读】 上篇文章:【ARM CoreLink 系列 8 – SMMU 详细介绍-上半部】 文章目录 ARM SMMU STE ENTRY1.1 STE ENTRYWORD[0]1.1.1 S1ContexPtr1.1.2 S1Fmt1.1.3 Config1.1.4 V(Valid)1.2 STE ENTRY WORD[1]1.2.1 S1CDMax1.2.2 S1ContextPtr1.3 STE E…...
高防CDN与WAF防火墙的协同防护:构筑网络安全堡垒
随着互联网的不断发展,网络安全威胁也日益增多,而网站作为企业在数字领域的门户,面临的风险更加复杂多样。在构筑网络安全堡垒的过程中,高防CDN(Content Delivery Network)与WAF(Web Applicatio…...
golang strings包的基本操作
文章目录 golang 的字符串函数EqualFoldHasPrefixHasSuffixContainsContainsRuneContainsAnyCountIndexIndexByteIndexRuneIndexAnyIndexFuncLastIndexLastIndexAnyLastIndexFuncTitleToLowerToLowerSpecialToUpperToUpperSpecialToTitleToTitleSpecialRepeatReplaceMapTrimTri…...
高效解决在本地打开可视化服务器端的tensorboard
文章目录 问题解决方案 问题 由于连着远程服务器构建模型,但是想在本地可视化却做不到,不要想当然天真的以为CTRLC点击链接http://localhost:6006就真能在本地打开tensorboard。你电脑都没连接服务器,只是pycharm连上了而已 解决方案 你需要…...
Spring Boot Actuator 2.2.5 基本使用
1. pom文件 ,添加 Actuator 依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> 2.application.properties 文件中添加以下配置 …...
字符串相似度匹配算法_莱茵斯坦距离算法
package day0330;public class LevenshteinDistanceUtil {public static void main(String[] args) {String a "WN64 F98";String b "WN64 F98 ";System.out.println("相似度:" getSimilarityRatio(a, b));}/*** 获取两字符串的相似度* * par…...
【EI会议征稿】第九届电气、电子和计算机工程研究国际学术研讨会 (ISAEECE 2024)
第九届电气、电子和计算机工程研究国际学术研讨会 (ISAEECE 2024) 2024 9th International Symposium on Advances in Electrical, Electronics and Computer Engineering 第九届电气、电子和计算机工程研究国际学术研讨会(ISAEECE 2024)将于2024年3月1-5日在南…...
Maven Helper插件——实现一键Maven依赖冲突问题
总结/朱季谦 业余在一个SpringBoot项目集成Swagger2时,启动过程一直出现以下报错信息—— An attempt was made to call a method that does not exist. The attempt was made from the following location: springfox.documentation.schema.DefaultModelDepe…...
理解位运算的规则
关卡名 理解位运算的规则 我会了✔️ 内容 1.理解位运算的基本规则 ✔️ 2.理解移位的原理以及与乘除的关系 ✔️ 3.掌握位运算的常用技巧 ✔️ 在学习位操作之前,我们先明确数据在计算机中怎么表示的。我们明确原码、反码和补码的概念和表示方法,之…...
Android Bitmap 使用Vukan、RenderEffect、GLSL实现模糊
文章目录 Android Bitmap 使用Vukan、RenderEffect、GLSL实现模糊使用 RenderEffect 模糊使用 Vukan 模糊使用 GLSL 模糊RS、Vukan、RenderEffect、GLSL 效率对比 Android Bitmap 使用Vukan、RenderEffect、GLSL实现模糊 本文首发地址 https://blog.csdn.net/CSqingchen/articl…...
Vue H5页面长按保存为图片
安装依赖:npm install html2canvas -d <template><div class"index"><div id"captureId" class"capture" v-show"firstFlag"><ul><li>1</li><li>2</li><li>3<…...
【Web】UUCTF 2022 新生赛 个人复现
目录 ①websign ②ez_rce ③ez_upload ④ez_unser ⑤ezsql ⑥ezpop ⑦funmd5 ⑧phonecode ⑨ezrce ①websign 右键打不开,直接抓包发包看源码 ②ez_rce “反引号” 在PHP中会被当作SHELL命令执行 ?codeprintf(l\s /); ?codeprintf(ta\c /ffffffffffl…...
设置python下载包代理
使用场景 正常网络情况下我们安装如果比较多的python包时,会选择使用pip install -r requirements.txt -i https://pypi.douban.com/simple --trusted-hostpypi.douban.com这种国内的镜像来加快下载速度。 但是,当这台被限制上网时(公司安全…...
nginx 配置前端项目添加https
可申请阿里云免费证书 步骤省略… nginx 配置 server {listen 8050; #默认80端口 如果需要所有访问地址都是https 需要注释listen 8443 ssl; #https 访问的端口 ,默认443server_name 192.168.128.XX; #域名 或 ip# 增加ssl#填写证书文件…...
Klipper温度曲线优化终极指南:三步解决95%打印质量问题
Klipper温度曲线优化终极指南:三步解决95%打印质量问题 【免费下载链接】klipper Klipper is a 3d-printer firmware 项目地址: https://gitcode.com/GitHub_Trending/kl/klipper 你是否曾为PLA打印翘边、ABS层间开裂或PETG拉丝问题而烦恼?这些问…...
Figma设计稿秒变Vue代码?实测Trae AI的“图像转代码”功能,还原度到底有多高
Figma设计稿秒变Vue代码?实测Trae AI的"图像转代码"功能还原度与实战应用 设计师与前端开发者的协作痛点由来已久。当Figma画布上精美的界面设计需要转化为实际可运行的代码时,往往意味着数小时的像素级测量、CSS编写和响应式调试。这种设计到…...
FASTDDS-Python 实战:从零构建分布式通信环境
1. 为什么选择Fast DDS-Python? 在物联网和机器人系统中,设备间的实时通信是个硬需求。想象一下,你正在开发一个智能仓储机器人系统,需要让多台机器人在复杂环境中协同工作。这时候,传统的HTTP请求-响应模式就显得力不…...
万象视界灵坛效果展示:血条样式进度条直观呈现各标签置信度差异
万象视界灵坛效果展示:血条样式进度条直观呈现各标签置信度差异 1. 平台概览 万象视界灵坛是一款基于OpenAI CLIP技术的高级多模态智能感知平台。它通过创新的像素风格界面,将复杂的视觉识别任务转化为直观的交互体验。平台采用16-Bit游戏美学设计&…...
ncmdump:一键解锁网易云音乐NCM加密文件,实现无损格式转换
ncmdump:一键解锁网易云音乐NCM加密文件,实现无损格式转换 【免费下载链接】ncmdump ncmdump - 网易云音乐NCM转换 项目地址: https://gitcode.com/gh_mirrors/ncmdu/ncmdump 你是否曾从网易云音乐下载了喜爱的歌曲,却发现只能在特定应…...
新手福音:用快马生成交互式cad安装指南,轻松跨过第一道坎
作为一名CAD初学者,第一次安装软件时确实容易手忙脚乱。记得我当初光是找官方下载链接就花了半小时,安装过程中还差点勾选了捆绑软件。后来发现用InsCode(快马)平台可以快速生成交互式安装指南,整个过程变得特别顺畅。今天就把这个实用方法分…...
Pixel Epic动态卷轴效果展示:从空白屏幕到完整研报的实时生成录屏
Pixel Epic动态卷轴效果展示:从空白屏幕到完整研报的实时生成录屏 1. 引言:当科研遇上像素冒险 在传统的研究报告撰写过程中,我们常常面对冰冷的界面和机械化的交互体验。Pixel Epic彻底改变了这一现状,将严肃的学术研究变成了一…...
别再手动写Excel了!用Coze+GPT-4o,5分钟把Word需求文档变成测试用例表格
从Word到Excel:零代码打造智能测试用例生成流水线 每次产品需求文档更新后,测试团队最头疼的莫过于手动编写成百上千条测试用例。传统方式下,测试工程师需要反复阅读PRD文档,逐条提取功能点,再按照固定模板填充到Excel…...
Qwen3-0.6B-FP8与STM32开发联动:生成嵌入式系统控制逻辑伪代码
Qwen3-0.6B-FP8与STM32开发联动:生成嵌入式系统控制逻辑伪代码 1. 引言 如果你是一位嵌入式开发者,或者正在学习STM32,下面这个场景你一定不陌生:拿到一个传感器模块,比如温湿度传感器,想用它来控制一个风…...
国产半导体测试设备公司领军者,杭州加速科技引领产业自主可控新征程
在半导体产业国产化全面推进的背景下,国产半导体测试设备公司成为突破产业链瓶颈、保障中国芯安全的核心力量。半导体测试设备作为芯片制造关键装备,长期依赖进口,制约国内半导体产业发展。经过多年技术攻坚,一批优质国产半导体测…...
