8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

“软件导致连接中止:套接字写入错误”的官方原因

M. Mariscal 2月前

104 0

给出此堆栈跟踪片段导致:java.net.SocketException:软件导致连接中止:java.net.SocketOutputStream.socketWrite0(本机方法)处的套接字写入错误

给出这个堆栈跟踪片段

原因:java.net.SocketException:软件导致连接中止:套接字写入错误
在 java.net.SocketOutputStream.socketWrite0(本机方法)

我尝试回答以下问题:

  1. 什么代码引发了此异常?(JVM?/Tomcat?/我的代码?)
  2. 什么原因导致抛出这个异常?

关于#1:

Sun 的 JVM 源代码不包含这个确切的消息,但我认为文本 软件导致连接中止:套接字写入错误 来自本机实现 SocketOutputStream

private native void socketWrite0(FileDescriptor fd, byte[] b, int off,
                 int len) throws IOException;

关于#2

我的猜测是,这是由于客户端在获得完整响应之前终止连接而导致的(例如,发送了请求,但在获得完整响应之前,它已关闭/终止/离线)

问题:

  1. 上述假设正确吗(#1 和 #2)?
  2. 服务器 端网络错误,无法写入客户端 ”?或者这是否会出现相同的错误消息?
  3. 最重要的是: 是否有官方文件(例如来自 Sun 的文件)说明上述内容?

我需要证明这个堆栈跟踪是套接字客户端的“错误”,并且服务器无法采取任何措施来避免它。(除了捕获异常或使用非 Sun JVM SocketOutputStream,尽管两者都不能真正避免客户端已终止的事实)

帖子版权声明 1、本帖标题:“软件导致连接中止:套接字写入错误”的官方原因
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由M. Mariscal在本站《sockets》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 尽管将正确的证书导入 cacerts trustore,但 SSLPoke.bat(SSL 故障排除脚本)窗口脚本仍然出现此错误。

    C:\Java\jdk1.8.0_111\jre\lib\security>SSLPoke.bat
    
    C:\Java\jdk1.8.0_111\jre\lib\security>"C:\jdk1.8.0_101\jre\bin\java" 
         `SSLPoke  tfs.corp.****.com  443`
    
    java.net.SocketException: Software caused connection abort: recv failed
        `at java.net.SocketInputStream.socketRead0(Native Method)`
        `at java.net.SocketInputStream.socketRead(SocketInputStream.java:116)`
        `at java.net.SocketInputStream.read(SocketInputStream.java:170)`
        `at java.net.SocketInputStream.read(SocketInputStream.java:141)`
        `at sun.security.ssl.InputRecord.readFully(InputRecord.java:465)`
        `at sun.security.ssl.InputRecord.read(InputRecord.java:503)`
        `at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:973)`
        `at sun.security.ssl.SSLSocketImpl.performInitialHandshake
           (SSLSocketImpl.java:1375)`
        `at sun.security.ssl.SSLSocketImpl.writeRecord(SSLSocketImpl.java:747)`
        `at sun.security.ssl.AppOutputStream.write(AppOutputStream.java:123)`
        `at sun.security.ssl.AppOutputStream.write(AppOutputStream.java:138)`
        `at SSLPoke.main(SSLPoke.java:28)`
    

    在网络中 -Djava.net.preferIPv4Stack=true to make connections to certain machines 添加 JVM 参数

    C:\Java\jdk1.8.0_111\jre\lib\security>"C:\Java\jdk1.8.0_111\bin\java"  
        **-Djava.net.preferIPv4Stack=true**  SSLPoke tfs.corp.****.com 443
    

    连接成功

    SSLPoke 的代码可以从这里下载: https://gist.github.com/4ndrej/4547029

返回
作者最近主题: