Socket ‘send()‘ :返回值 100 代表什么
结论send()返回 100只表示本机内核 TCP 发送缓冲区收下了 100 字节不表示对端已经收到更不表示对端应用程序已经读到。1.send()在干什么典型调用ssize_tnsend(sockfd,buf,len,0);对TCP来说send()做的事是用户进程 buf --拷贝-- 本机内核 socket 发送缓冲区send buffer --返回-- n 成功拷进去的字节数它不会等到网卡把数据发出去对端 TCP 回 ACK对端recv()把数据读走所以它是交给本机协议栈算成功不是对端交付成功。UDP 的send()/sendto()语义更弱多数情况下只表示交给本机协议栈去发连进了可靠发送队列都谈不上。下面默认讲TCP。2. 返回值怎么读返回值含义你该做什么n 0成功写入内核缓冲区n 字节若n len剩下的要继续发n 0TCP 上极少见不要当成功按错误/异常处理n -1调用失败看errno例子返回 100假设charbuf[200];ssize_tnsend(fd,buf,200,0);// n 100含义内核收下了buf[0..99]buf[100..199]还没进发送缓冲区需要再send(fd, buf100, 100, 0)直到发完或出错这叫partial send部分发送。TCP 是字节流一次send不保证把你给的len全部吃完。阻塞套接字上空间不够时往往会卡住等到能再塞一些所以返回值小于 len相对少但标准不保证一定一次发完规范写法仍是循环发送。非阻塞套接字上缓冲区不够就立刻返回已写入的字节或EAGAIN非常常见只发了一部分。3. 数据实际走了哪几层① send() 返回 100 只到本机内核 send buffer ② 内核按 MSS 切片从网卡发出 可能还在本机排队对端完全不知道 ③ 对端内核收到 TCP 段回 ACK 到了对端协议栈对端应用未必读 ④ 对端 recv() 返回 0 到了对端应用程序 ⑤ 对端业务回 “OK / 处理完成” 到了业务确认阶段send()100能证明吗本机入队能已经上电线不能对端 TCP 收到并 ACK不能对端应用读到不能对端业务处理完不能TCP 的可靠是在连接还活着的前提下协议栈会重传、排序、去重尽量把字节流交给对端内核。这套机制在send()返回之后才慢慢发生返回值本身不是这套机制的完成通知。4. 为什么会返回 100 而不是 200常见原因发送缓冲区不够塞下全部数据对端接收窗口小、自己发得太快、网络拥塞本机SO_SNDBUF满了。非阻塞 socket能塞多少塞多少立刻返回。被信号打断较少见可能只完成了一部分。协议/实现限制一次系统调用拷贝量有上限但通常仍应循环发。5. 正确发送循环直到发完模板size_tsent0;while(sentlen){ssize_tnsend(fd,bufsent,len-sent,0);if(n0){if(errnoEINTR)continue;// 被信号打断重试if(errnoEAGAIN||errnoEWOULDBLOCK){// 非阻塞缓冲区满等可写再发select/poll/epollbreak;}// EPIPE / ECONNRESET对端关掉或复位perror(send);break;}sent(size_t)n;}// sent len 才算“本机全部入队完成”入队完成 ≠ 对端收到。这只是你这边调用层的完成。6. 失败时errno常见含义errno含义EAGAIN/EWOULDBLOCK非阻塞且暂时发不出去缓冲满EINTR系统调用被信号打断EPIPE对端已关闭写方向再发会 SIGPIPE可忽略该信号ECONNRESET对端 RST连接被重置ENOTCONN还没 connect 成功ECONNREFUSED等多出现在 connect不是 send 主场景注意对端已经挂了之前塞进缓冲区的数据仍可能让 send 连续成功好几次直到探测到死亡keepalive、写时发现 RST、超时。7. 怎样才算对端收到1传输层收到TCP ACK内核收到对端 ACK表示对端协议栈收下了这些字节。应用默认看不到这次 ACK。send()不等这个。有TCP_INFO、SIOCOUTQ看发送队列残留那是排查手段不是业务确认。2应用层读到对端recv()对端程序调用recv()/read()得到数据。如果对端进程卡死、没读数据堆在对端接收缓冲区你这边窗口会逐渐为 0后面send会阻塞或返回部分/EAGAIN。3业务确认应用协议回包例如请求带序号应答带同样序号固定回OK\nRPC 的 response工业现场Modbus-TCP、示教器、自定义帧都是自己定义帧头长度收到完整帧后再回确认。不能靠send返回值。8. 和粘包、拆包的关系因为 TCP 是字节流send两次对端可能recv一次粘包send一次 200 字节对端可能先recv80 再recv120拆包send返回 100只是你这边分两次入队对端看到的仍是连续字节没有“两次消息”的边界所以应用必须自己定边界先发 4 字节长度再发 payload或用分隔符接收端循环recv拼到一帧完整再解析send返回 100 和粘包不是一回事返回 100 是发送端部分入队粘包是接收端一次读到了多帧。9. 阻塞 vs 非阻塞和返回值的关系阻塞 socket缓冲区有空位尽量多写常一次写完但仍应循环缓冲区满阻塞等待直到能写入或出错返回 100当时只写入了 100若len200阻塞模式下很多实现会继续等到能写但可移植代码不要假设一次写完非阻塞 socket能写多少写多少立刻返回一个字节都写不了-1EAGAIN返回 100 非常正常配合epollEPOLLOUT再继续send剩余数据。10.send()vswrite()vssendmsg()对已连接 TCPwrite(fd, buf, len)和send(fd, buf, len, 0)类似都是写入发送缓冲区send多一个flags如MSG_NOSIGNAL、MSG_DONTWAIT返回值含义一样成功拷进内核的字节数11. 对照表你看到的现象实际含义send返回 100本机缓冲区多了 100 字节待发send返回 200 且 len200本机全部入队对端仍可能没收到对端抓包看到这段 TCP已经在网络上仍可能丢靠重传本机看到 ACK对端内核收到对端recv返回 100对端应用读到 100 字节对端回业务 ACK对端逻辑处理了

相关新闻

Runbook+脚本:让Claude在DaVinci Resolve中实现AI剪辑工作流

Runbook+脚本:让Claude在DaVinci Resolve中实现AI剪辑工作流

每次看到"让AI剪辑视频"的说法,我都想泼一盆冷水。大模型确实能写文案、能调代码,但直接丢给它一句"把这段素材剪成有节奏的2分钟短片",它连时间线上哪个片段对应哪段素材都搞不清楚。所以当我看到这个用Runbook加脚本让…

2026/10/11 16:14:31 阅读更多 →
基于Python的实时人脸疲劳检测系统设计与实现

基于Python的实时人脸疲劳检测系统设计与实现

简介:本资源是一套完整的Python毕业设计项目,面向计算机、人工智能、自动化等专业学生及初学者,聚焦人脸识别与驾驶员疲劳检测两大核心任务,提供从模型训练到实时预警的端到端实现方案。压缩包共37个文件,含16个可读可…

2026/10/11 16:14:31 阅读更多 →
代码覆盖率统计工具选型与落地实践:从原理到门禁配置

代码覆盖率统计工具选型与落地实践:从原理到门禁配置

做后端的人,基本都听过“你这次改动覆盖率多少”这句话。很多人对覆盖率的理解,停留在“测试跑了多少代码”这个层面,但真正把代码覆盖率统计工具用好的人,往往能把一个模糊的质量指标变成研发流程里的一道硬性卡点。这篇文章就围…

2026/10/11 16:14:31 阅读更多 →

最新新闻

无持久服务也能审计CI里的Agent:agent-beacon ci命令完整实践

无持久服务也能审计CI里的Agent:agent-beacon ci命令完整实践

【免费下载链接】agent-beacon The cross-harness, self-improving memory layer for AI agents. 项目地址: https://gitcode.com/gh_mirrors/ag/agent-beacon 点击查看 免费下载 agent-beacon 是面向 AI Agent 的跨 harness 遥测与记忆层,它能在本地、…

2026/10/11 17:04:03 阅读更多 →
SAM2与UNet融合实战:图像分割边界精修与mIoU提升指南

SAM2与UNet融合实战:图像分割边界精修与mIoU提升指南

简介:本资源面向计算机视觉方向的开发者与图像分割学习者,提供一套将SAM2与UNet结合的高精度分割算法完整项目源码,适合具备一定深度学习基础、希望深入理解分割模型融合思路的中高级读者参考实践。压缩包共82个文件,约999KB&…

2026/10/11 17:04:03 阅读更多 →
彩钢瓦机二手价格行情解析 彩钢瓦成型机供应企业筛选名录

彩钢瓦机二手价格行情解析 彩钢瓦成型机供应企业筛选名录

南通首创重工机械有限公司坐落于江苏省海安市高新技术开发区,是一家专业从事金属加工与冷弯成型设备研发、生产和销售的制造企业,长期聚焦为建筑钢结构行业提供全套金属成型加工设备,核心覆盖彩钢瓦机、彩板压型机、压瓦机、轻钢龙骨机、C型钢…

2026/10/11 17:04:03 阅读更多 →
C# WinForms仿QQ双人俄罗斯方块对战源码:垃圾行机制与工程实现

C# WinForms仿QQ双人俄罗斯方块对战源码:垃圾行机制与工程实现

简介:一款用C#开发的仿QQ风格俄罗斯方块双人对战游戏源码,面向C#初学者和游戏开发爱好者,适合课程设计、毕业设计或自学练手。软件核心是同机双人实时对战,完整实现方块生成、移动、旋转、下落、消行计分与碰撞判定,并…

2026/10/11 17:04:03 阅读更多 →
Skill 插件化开发入门:给 Agent 装上『可控缰绳』的正确姿势

Skill 插件化开发入门:给 Agent 装上『可控缰绳』的正确姿势

Skill 插件化开发入门:给 Agent 装上『可控缰绳』的正确姿势 【免费下载链接】harness-sdk Build an agent harness and control it end-to-end. Open-source SDK for production AI agents in Python & TypeScript - any model, any cloud. 项目地址: https:…

2026/10/11 17:04:03 阅读更多 →
系统软件需求清单与技术参数:从可量化契约到可验收落地

系统软件需求清单与技术参数:从可量化契约到可验收落地

简介:这份文档面向软件项目开发中的架构选型与采购人员,聚焦系统软件需求清单及其技术参数,帮助读者在应用服务器、中间件与数据库服务器的配置决策上获得可对照的参考依据。资源包内含1个doc文件,压缩包约448KB,以文字…

2026/10/11 17:03:02 阅读更多 →

日新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 10:45:37 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:53 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:54 阅读更多 →