今天就跟大家聊聊有关深入浅析java中connection reset 的异常处理,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
在Java中常看见的几个connection rest exception, Broken pipe, Connection reset,Connection reset by peer
Socked reset case
Linux中会有2个常见的sock reset 情况下的错误代码
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”-“服务器过早终止”错误。
EPIPE
错误被描述为“broken pipe”,即“管道破裂”,这种情况一般发生在客户进程不理会(或未及时处理)Socket 错误,继续向服务 TCP 写入更多数据时,内核将向客户进程发送 SIGPIPE 信号,该信号默认会使进程终止(此时该前台进程未进行 core dump)。结合上边的 ECONNRESET 错误可知,向一个 FIN_WAIT2 状态的服务 TCP(已 ACK 响应 FIN 分节)写入数据不成问题,但是写一个已接收了 RST 的 Socket 则是一个错误。
Java 中的socket input stream/output stream 的处理
先看代码片段
SocketInputStream.c
switch (errno) { case ECONNRESET: case EPIPE: JNU_ThrowByName(env, "sun/net/ConnectionResetException", "Connection reset"); break; ....
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
软考中级精品资料免费领
- 历年真题答案解析
- 备考技巧名师总结
- 高频考点精准押题
- 资料下载
- 历年真题
193.9 KB下载数265
191.63 KB下载数245
143.91 KB下载数1148
183.71 KB下载数642
644.84 KB下载数2756
相关文章
发现更多好内容- Java 中如何实现 double 类型转 BigDecimal 类型?(java double转bigdecimal怎么实现)
- 在 Java 中如何利用 Map 构建表格?(java中怎么使用map做表格)
- Java 中的 exit 方法是否能够终止所有线程?(java exit是否能终止所有线程 )
- Java Supplier 接口如何有效避免空指针问题?(java supplier接口如何避免空指针)
- Java 中如何删除数组中的某个元素?(java怎么删除数组中的某个元素)
- 如何精准地区分 Java 中的重载方法?(如何区分Java中的重载方法)
- Java 中字符串赋值如何赋给另一个变量?(java字符串赋值怎么给另一个变量)
- Java 中静态初始化数组的具体方法有哪些?(Java静态初始化数组的方法是什么)
- Java 拦截器究竟有哪些作用呢?(java拦截器的作用是什么)
- 如何使用 Dockerfile 构建 Java 镜像?(dockerfile如何构建java镜像)