gpt4 book ai didi

Java SSLServerSocket soTimeout 不起作用?

转载 作者:太空宇宙 更新时间:2023-11-03 13:55:45 26 4
gpt4 key购买 nike

我使用的是用 Java 编写的 Apache Thrift 服务器。当我创建 ServerSocket 时,我传递了一个名为 clientTimeout 的参数,其值为 60000(十分钟)。但这并不像预期的那样工作——我连接到服务器,执行一个方法等待 11 分钟再次执行方法而不重新连接并且没有得到错误(正如我所料)。我尝试在非 SSL thrift 服务器上执行此操作,效果很好。在 thrift 资源中,我找到了如何创建 SSL 套接字,似乎没问题。

   private static TServerSocket createServer(SSLServerSocketFactory factory, int port, int timeout, boolean clientAuth,
InetAddress ifAddress, TSSLTransportParameters params) throws TTransportException {
try {
SSLServerSocket serverSocket = (SSLServerSocket) factory.createServerSocket(port, 100, ifAddress);
serverSocket.setSoTimeout(timeout);
serverSocket.setNeedClientAuth(clientAuth);
if (params != null && params.cipherSuites != null) {
serverSocket.setEnabledCipherSuites(params.cipherSuites);
}
return new TServerSocket(serverSocket);
} catch (Exception e) {
throw new TTransportException("Could not bind to port " + port, e);
}
}

有人遇到这样的问题吗?如何解决?

最佳答案

ServerSocket 上的超时仅影响 ServerSocket.accept()。它不会被接受的 Sockets 继承为读取超时。如果你想要,你必须明确地设置它。这是 Java API 和 BSD Sockets API 之间的区别。

关于Java SSLServerSocket soTimeout 不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9427474/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com