博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Broken pipe 和 connection reset by peer
阅读量:4167 次
发布时间:2019-05-26

本文共 540 字,大约阅读时间需要 1 分钟。

网络编程中,不慎就会掉入connection reset by peer或者broken pipe的坑中。主要是没有注意TCP的四次挥手。

connection reset by peer出现的主要原因是,某个套接口向一个已经关闭了的套接口写数据。典型的情况是,在C/S架构中,客户端突然崩溃,但是服务器端不知道客户端以及崩溃,如果此时服务器端向崩溃的客户端发送数据,则会出现connection reset by peer异常。其实这里的崩溃可以理解为客户端的套接口在向服务器端发送完请求后突然关闭,这时服务器端读取客户端的请求,并响应,但因为客户端发送完请求后就直接关闭了,因此对于服务器端的响应,客户机会返回一个reset报文,服务器端接收到这个报文,就会直接抛出connection reset by peer异常。

此时如果服务器继续向这个已经抛出异常的套接口写数据,套接口就会抛出broken pipe异常。

这个坑在使用epoll/select事件触发机制时要非常小心。因为当客户端的套接口关闭时,根据TCP的四次挥手,它会向服务器端发送一个FIN,而这个FIN会激活事件,如果这时不对收到的数据进行检查,查看收到的数据是否有效,直接向客户端写数据,那么就会报异常。

转载地址:http://tiqxi.baihongyu.com/

你可能感兴趣的文章
内核线程创建
查看>>
linux中cat命令使用详解
查看>>
java中的异常机制
查看>>
java SE面向对象思维导图
查看>>
三维分析之视频投放
查看>>
SuperMap iDesktop之栅格值怎么查
查看>>
SuperMap iClient3D for WebGL教程-orientation
查看>>
SuperMap iClient3D for WebGL教程-description描述属性
查看>>
SuperMap iClient3D for WebGL教程-CallbackProperty
查看>>
如何修改leaflet聚合图的层级和样式
查看>>
三维分析之开敞度分析
查看>>
BIM+GIS应用的八大挑战
查看>>
.net实现.aspx页面自动加载.cs程序定义的变量并按照格式输出
查看>>
[Leetcode]最后一个单词的长度
查看>>
merges sort use c++
查看>>
插入排序用递归实现
查看>>
工作流审批平台-审批流程-指定审批部门
查看>>
商务智能-系统概述-数据图形方式
查看>>
软件项目管理系统-项目管理-模块定义-开发内容
查看>>
工作流审批平台-审批功能
查看>>