1. 10053

这个错误码的意思是:  A established connection was aborted by the software in your host machine, 一个已建立的连接所在主机的软件中止

2. 10054

这个错误码的意思是: Connection closed by peer, 连接已经被对方关闭

10053 出现的可能原因是:数据传输超时或者协议错误。

当主动端发起连接服务器的请求,连接成功之后发送数据请求给服务器,服务器处理时间稍长,导致客户端超时关闭,等到服务器将数据写入缓冲区后,TCP协议发现socket已经关闭,所以服务器会出现10053的错误码,这是正常的现象。

10054 出现的可能原因是:对端关闭了socket(可能是异常也可能是超时),然而本端还没有感知到,依旧写入数据(对端接收缓冲区有数据),对端发现有未处理的数据直接回复RST重置连接标记,表明对端已经关闭了socket

检测出这个错误码一般是对端发送了RST包给本端,本端接收这个包, 表示对端出现了异常:  四种情况发送RST码:

1. 本端连接对端未打开的端口, 对端发送RST包

2. 请求超时

3. 已关闭连接上收到数据:

主要出现在连接的关闭过程,当请求关闭连接的一方在两个MSL后,仍然收到服务机发送来的最后一个FIN,说明其最后发送出的ACK丢包, 服务机又重发了FIN包,而此时客户机已经不处于TIME_OUT状态,连接已经彻底不存在,再收到服务机发送来的FIN,就会直接回复一个RST包,让服务机直接关闭连接,抛弃 缓冲区的所有数据。

举一个其他例子: 主动端关闭socket,发送了fin给被动端,此时主动端无法接受和发送数据了,此时如果被动端调用read会收到fin(读取0),如果被动端write给主动端,主动端会发送rst,但rst不会立即通知到被动段,只有被动端在第二次write时,数据不会发送给主动端而是发出一个SIGPIPE信号而终止被动端(可捕获忽略该信号)

4. close连接时, 接收缓冲区还有数据

如果close连接时,接收缓冲区还有对端发过来的数据,则回一个RST,直接丢弃接收缓冲区的内容

5. 设置了so_linger选项但是 l_lingertime 为0, close 时会发出RST

注意到10053和10054出现的原因有重复,以下是区分他俩的一个文章:

http://www.blogjava.net/pandawang/archive/2013/11/28/406922.html

某端出现10053和10054的在于主动端(客户端)和被动端(服务器)建立连接后,服务器非正常关闭时有没有关闭socket,这个fin包是不是在rst之前被客户端收到,fin先于rst,则10053

update problem:

今天启动flask的自带server,非常简单,就是一个直接返回字符串(有sleep操作,故意的),发送一个请求给flask,这个请求会超时: 1. 在本机上发,2. 在其他主机上发;

发现这俩种方法的结果不同,第一种会打印10053的错误信息,第二种不会;

经过microsoft message analyzer 抓包工具分析, 第一种操作,数据包是在环路接口流动,socket很快就关闭并回收了,导致server将响应返回时报错,协议栈认为是自己关闭的所以报的10053,但其实应该是10054.

因为在一个已经关闭的socket写会引起对端发送rst,连接重置,但因为是回路接口,windows的实现可能认为是自己关闭的,所以错误码才是10053。

第二种因为不再同一个机器,对端关闭不影响,数据发送还是成功的(对端回复了rst),所以没有报错。

同样的实验在linux下面运行,报的错是 error 32 broken pipe。这点和Windows不一样,如果协议栈认为是自己关闭的,在linux上的错误应该是 error 53 ECONNABORTED。

所以数据传输的错误码,在环路接口上可能与正常的理解不同,同时与系统相关。

以下附上抓包工具的结果:

下图是client和server在统一机器上的情况:其报错10053,看右侧的第二个框,其响应并没有写入完全,就报错,所以断定是socket资源已经被销毁了,但由于是在同一个机器,所以协议层认为是自己断的,报了10053

ps:环路接口每个syn,fin,ack包都重发一遍了,不知道为啥。。。。

下图是client和server不在同一机器上的情况:其未报10053, 可以看39938消息,数据是写入缓冲区成功了,发送的时候对端回了rst,参考39950。 flask自带的server可能处理了这种并没有打印连接重置的错误

ps:

1. close 是优雅关闭过程,当socket的引用计数减少到0,开始优雅关闭流程,发送fin包,经四次握手关闭

2. shutdown 是直接破坏socket的通信,如果指定关闭WR,则发送fin包给对方

10054 java_【理解】 Error 10053和 Error 10054相关推荐

  1. 【理解】 Error 10053和 Error 10054

    1. 10053 这个错误码的意思是:  A established connection was aborted by the software in your host machine, 一个已建 ...

  2. ffmpeg rtmp 推流错误WriteN, RTMP send error 10053 10038

    利用ffmepg推264流到rtmp服务端出现错误WriteN, RTMP send error 10053,具体如下图所示. 图1推流到rtmp服务错误 原因是视频流缺少SPS,PPS信息,加上这两 ...

  3. Socket error Event: 32 Error: 10053

    索引关键词 Socket error Event: 32 Error: 10053. Connection closing...Socket close. Connection closed by f ...

  4. 解决git 中 error 10053 问题

    解决git 中 error 10053 问题 问题描述: git pull 时,报错:fatal: unable to access 'https://github.com/huangyuanyin/ ...

  5. ssh连接失败报错:Socket error Event: 32 Error: 10053.

    问题:使用远程连接工具ssh连接局域网内的主机,刚连接成功一会儿就断开连接,报下面的错误信息 Socket error Event: 32 Error: 10053. Connection closi ...

  6. Socket error Event: 32 Error: 10053.

    Socket error Event: 32 Error: 10053. 问题:远程连接中,远程计算机自动重启. 考虑为远程协议或端口问题,远程的话只一下下就手动断开,试试会不会无问题,无问题的话再从 ...

  7. outlook express: socket error 10053 0x800ccc0f

    最近这几天国外几个公司的用户好多都在用OUTLOOK EXPRESS的时候提示:socket error 10053 0x800ccc0f,经确认服务器的连接正常,如果我使用TELNET测试SMTP连 ...

  8. Delphi 通信报Asynchronous socket error 10053错误的一个解决方法

    在使用Delphi中的TClientSocket和TServerSocket进行通信编程时,当使用TClientSocket这方的客户端使用TClientSocket.close断开连接并退出程序时, ...

  9. asynchronous socket error 10053 socket和http的区别

    1.当终端连上了自己电脑的服务器,Androidstdio也连上了终端 2.当我切换WiFi的时候,WiFi是不同网段的,给电脑分配了不同网段的IP,这时候调试工具就会报"asynchron ...

最新文章

  1. Winserver2012R2 部署密钥恢复代理
  2. 【错误记录】Kotlin 编译报错 ( Type mismatch: inferred type is String? but String was expected )
  3. 设计模式随笔系列:鸭子-策略模式(Strategy)
  4. centos7启动与切换图形界面
  5. logistic回归 如何_R_语言 logistic回归分析
  6. linux挂载目录到分区,Ubuntu7.10下挂载/home目录到一个分区的方法
  7. 20145203盖泽双《网络对抗技术》拓展:注入:shellcode及return-into-libc攻击
  8. Git 官方安装教程
  9. 有了这些接口测试用例+工具,测试效率想不提升都难
  10. 开源网络教学平台SAKAI开发环境的搭建
  11. 无积分怎么下载百度文库的文档
  12. ubuntu修改配置IP地址和DNS的方法总结(4种)
  13. shell脚本快速执行命令
  14. Scratch编程与数学之求累加和!
  15. Excel聚光灯--双箭头指示
  16. 如何把视频嵌入PPT合为一个文件
  17. 获取应用包名、获取应用名称、获取MetaData值、获取应用所有Permission、获取permission对应描述信息
  18. [转]国内外php主流开源cms、商城、点评、SNS、DIGG、RSS、分类信息、Wiki汇总(2009年)...
  19. json bosn
  20. for of与for in的区别

热门文章

  1. gulimall记录https://note.youdao.com/s/8Y50kXqe
  2. C++控制台程序点击界面程序暂停,回车程序继续运行的原因
  3. chrome浏览器下的性能测试脚本录制
  4. marketscript
  5. 新手学go,导包导不了
  6. 新鲜出炉: IE8 beta1 的下载地址以及官方论坛
  7. 贵州职称取消计算机,贵州老师们,在不久或将实行取消教师职称评定!按教龄直接晋升职称!...
  8. 一班洽谈框架细化_班组管理之我见
  9. signature=8b78efd08a83109cc3e573938dab113b,YOUR SIGNATURE DELI.
  10. 主程序调用子程序的c语言例子,子程序调用M98编程举例