java - 为 SSLSocket 握手设置超时

标签 java sockets ssl soap tcp

最近,我在使用 apache axis 1.4 的 SOAP 调用时遇到了问题。我已将超时设置为 30 秒,但有时会在抛出异常之前达到约 1000 秒。在探索axis的内部实现后,我发现这是由于SSLSocket握手。

请参阅下面的示例错误。

java.net.SocketException: Connection timed out (Read failed)
at java.net.SocketInputStream.$$YJP$$socketRead0(Native Method)
at java.net.SocketInputStream.socketRead0(SocketInputStream.java)
at java.net.SocketInputStream.socketRead(SocketInputStream.java:116)
at java.net.SocketInputStream.read(SocketInputStream.java:171)
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:983)
at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1385)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1413)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1397)
at org.apache.axis.components.net.JSSESocketFactory.create(JSSESocketFactory.java:186)

是否可以在握手时设置超时?或者有没有别的办法强行切断连接。

另外,看代码中的握手部分

 sslSocket = sslFactory.createSocket(tunnel, host, port, true);
            if (log.isDebugEnabled()) {
                log.debug(Messages.getMessage("setupTunnel00",
                          tcp.getProxyHost(),
                        "" + tunnelPort));
            }
        }

        ((SSLSocket) sslSocket).startHandshake();

最佳答案

创建隧道时,调用:

tunnel.connect(new InetSocketAddress(host, port), 30000);

关于java - 为 SSLSocket 握手设置超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49441183/

相关文章:

javax 打印 vs java awt 打印 api

Java parallelStream() 和 reduce() 没有提高性能

c# - C# : How to get the response stream? 中的套接字

java - Wasabi自动重启docker容器

Java:简单的字符串到日期解析失败并出现异常

Python 套接字 : how to only receive one message at a time

ruby - ping网站时计算响应时间(Ruby)

c++ - 断开连接后正确杀死 asio steady_timer

ssl - 自签名 SSL 证书 403.7 错误

ios - 将敏感数据附加到 iOS 应用程序中使用的 https url 的末尾是否安全?