文章目录

在实际TCP&UDP C/S数据收发过程中,常见error
code有ECONNABORTED(WSAECONNABORTED),ECONNRESET(WSAECONNRESET),nonblocking
io当然还有WOULDBLOCK(WSAWOULDBLOCK)。

  1. ECONNABORTED(WSAECONNABORTED)

该错误被描述为“software caused connection abort”,即“软件引起的连接中止”。原因在于当服务和客户进程在完成用于 TCP 连接的“三次握手”后,客户 TCP 却发送了一个 RST (复位)分节,在服务进程看来,就在该连接已由 TCP 排队,等着服务进程调用 accept 的时候 RST 却到达了。POSIX 规定此时的 errno 值必须 ECONNABORTED。源自 Berkeley 的实现完全在内核中处理中止的连接,服务进程将永远不知道该中止的发生。服务器进程一般可以忽略该错误,直接再次调用accept。

这个tcp send引起的,一般是protocol stack重传超时或者protocol处理错误等。ECONNABORTED通常发生在重传(一定次数)失败后,强制关闭套接字;
  1. ECONNRESET(WSAECONNRESET)

    ECONNRESET错误发生在对方意外关闭套接字后。
    对于TCP

       远程主机已强制关闭,发送数据,远程主机protocol stack回应RST。
    

    对于UDP

       在Windows系统上,双方正在进udp数据交互,另一端关闭了,发送方会收到“ICMP Port
    

Unreached",protocol向上报WSAECONNRESET。这时应用层一般不做关闭动作(除非有特殊的需求),因为这仅仅另外一端的
UDP socket不存在了,本端的udp socket还是完全合法的。

      有一点要注意的是,在Linux上,应用层不会得到ECONNRESET。

该错误被描述为“connection reset by peer”,即“对方复位连接”,这种情况一般发生在服务进程较客户进程提前终止。当服务进程终止时会向客户 TCP 发送 FIN 分节,客户 TCP 回应 ACK,服务 TCP 将转入 FIN_WAIT2 状态。此时如果客户进程没有处理该 FIN (如阻塞在其它调用上而没有关闭 Socket 时),则客户 TCP 将处于 CLOSE_WAIT 状态。当客户进程再次向 FIN_WAIT2 状态的服务 TCP 发送数据时,则服务 TCP 将立刻响应 RST。一般来说,这种情况还可以会引发另外的应用程序异常,客户进程在发送完数据后,往往会等待从网络IO接收数据,很典型的如 read 或 readline 调用,此时由于执行时序的原因,如果该调用发生在 RST 分节收到前执行的话,那么结果是客户进程会得到一个非预期的 EOF 错误。此时一般会输出“server terminated prematurely”-“服务器过早终止”错误。

  1. WOULDBOCK(WSAWOULDBLOCK)

    对于nonblocking io,这个很常见了。发送数据的时候,socket sending
    buffer没有空间了,得到这error code。简单做法是稍后重试,更好的做法是采用select/epoll之类的机制,注册一个WRITE
    EVENT,当sending buffer有空间了,kernel通知应用程序。

  2. ETIMEDOUT

错误被描述为“connect time out”,即“连接超时”,这种情况一般发生在服务器主机崩溃。此时客户 TCP 将在一定时间内(依具体实现)持续重发数据分节,试图从服务 TCP 获得一个 ACK 分节。当最终放弃尝试后(此时服务器未重新启动),内核将会向客户进程返回 ETIMEDOUT 错误。如果某个中间路由器判定该服务器主机已经不可达,则一般会响应“destination unreachable”-“目的地不可达”的ICMP消息,相应的客户进程返回的错误是 EHOSTUNREACH 或ENETUNREACH。当服务器重新启动后,由于 TCP 状态丢失,之前所有的连接信息也不存在了,此时对于客户端发来请求将回应 RST。如果客户进程对检测服务器主机是否崩溃很有必要,要求即使客户进程不主动发送数据也能检测出来,那么需要使用其它技术,如配置 SO_KEEPALIVE Socket 选项,或实现某些心跳函数。

  1. EPIPE

错误被描述为“broken pipe”,即“管道破裂”,这种情况一般发生在客户进程不理会(或未及时处理)Socket 错误,继续向服务 TCP 写入更多数据时,内核将向客户进程发送 SIGPIPE 信号,该信号默认会使进程终止(此时该前台进程未进行 core dump)。结合上边的 ECONNRESET 错误可知,向一个 FIN_WAIT2 状态的服务 TCP(已 ACK 响应 FIN 分节)写入数据不成问题,但是写一个已接收了 RST 的 Socket 则是一个错误。

TCPUDP 常见的错误码相关推荐

  1. mysql常见的错误码

    Mysql错误代码  Mysql错误代码分为两部分,老版本一部分,4.1版本为新的部分 第一部分:  mysql的出错代码表,根据mysql的头文件mysql/include/mysqld_error ...

  2. 常见HTTP错误码定义

    1xx消息:请求已被接受,需要继续处理.HTTP/1.0协议中没有定义任何1xx状态码. 100 Continue 客户端应当继续发送剩余请求. 101 Switching Protocols 服务器 ...

  3. 海康工业相机SDK错误码常见场景解析

    在使用SDK二次开发过程中,接口的调用往往会遇到较多的错误,sdk错误码能够帮助我们快速分析错误原因,解决问题,针对常见的错误码,下面给出一下常见的问题原因,供大家分析 1.MV_OK 0x00000 ...

  4. 微信支付curl出错及错误码解决方案

    关键字:微信支付 curl出错 错误码6 错误码7 错误码28 错误码52 错误码58 错误码60 错误码77  作者:方倍工作室 原文: http://www.cnblogs.com/txw1958 ...

  5. 【问链-EOS公开课】第十课 EOS 错误码整理

    EOS 目前大约有180种错误类型,虽然有错误码,但是还是很笼统的,具体的报错信息还得看detail里面的内容 一.常见的错误码以及issue上对应的错误记录 3010001 Invalid name ...

  6. 转!!CMPP 网关错误码说明

    http://www.163duanxin.com/msg/1753.htm CMPP错误码说明 与中国移动代码的对应关系.  MI::zzzz SMSC返回状态报告的状态值为EXPIRED MJ:z ...

  7. error 系统错误 错误码10007_使用 Go 定义错误码

    简介 设计错误码 代码实现 常见的错误码 总结 当前部分的代码 简介 不管在什么系统中, 定义错误码都是必不可少的. 错误码可以帮助定义问题, 通常错误码设计为某种模式结构, 可以判断出错误的级别, ...

  8. 服务器ec系列,Cloud_EC服务端错误码大全

    在服务端开发过程中,会经常返回错误码,如果没有对应的错误码描述,仅仅有一个返回码很 难定位问题,这样进展和效率都会很低下! 这里将常见的错误码与对应的描述总结在这里,后续会一直进行追加与完善,详情如下 ...

  9. 详解:strerror函数:将错误码转化为错误信息

    对于大家在浏览网页的时候,或多或少的会见识过不少的错误信息:比如:最常见的就是:404 但是,使用strerror函数,可以将错误码转化为错误信息!不知道偶然间看见的读者是否有兴趣进行深入研究一下,本 ...

最新文章

  1. jquery的trigger和triggerHandler区别
  2. 基本拖拽效果,使用 mousedown , mousemove , mouseup实现
  3. 思科交换机PXE响应巨慢,甚至无响应问题
  4. RTSP再学习 -- Hi3516A RTSP实例
  5. BloomFilter算法概述
  6. [JavaWeb-JavaScript]JavaScript变量
  7. feignclient注解使用_从 Feign 使用注意点到 RESTFUL 接口设计规范
  8. POJ - 1847 Tram(dijkstra)
  9. Bmp格式与编程读取解析
  10. android 粒子动画火焰,canvas粒子火焰跟随动画特效
  11. 根据经纬度算出两个位置之间的距离
  12. Dcmtk在PACS开发中的应用(基础篇) 第一章 与影像设备互连 作者 冷家锋
  13. 编译C#和C++共存的解决方案的小结
  14. 汇编语言上机考试三星题——加密的key和明文字符串(二)
  15. 《测试类职位面试360度》
  16. liang-barsky_C和C ++中的Liang Barsky线裁剪算法
  17. 实用Chrome插件
  18. 高射炮打蚊子丨在VS 2017里用C语言写经典的冒泡排序
  19. Kotlin:Outdated Kotlin Runtime问题修复
  20. 微信公众号在打开的网站中直接进入苹果应用商店

热门文章

  1. can only concatenate str (not “NoneType“) to str
  2. node 导出csv文件_如何使用Node.js编写CSV文件
  3. AVISO卫星测高格网数据下载与读取
  4. BrainAGE作为大脑老化的神经影像标志物的十年
  5. illustrate插件--AI插件--印前插件--CADTools--导出表分析--界面检测(二)
  6. 学完python再学Java顺利吗,学完python再学Java要多久
  7. [人工智能]回溯算法解数独
  8. 2020 CSP-游记
  9. java实现二维码生成的几个方法
  10. 疫情期各类数据图表背后的七个方法、三驾马车与一个工具