Java SSLServerSocket soTimeout 不起作用?

标签 java ssl thrift

我使用的是用 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/

相关文章:

java - JUnit 4 测试套件问题

java - 如何解决java中的无限递归(堆栈溢出)?

java - android自定义信任和 key 管理器

python - 如何在 python 中验证服务器的 ssl 证书?

java - 节俭的Java : Cannot use reserved language keyword: "alias"

java - 如何知道何时抛出异常

java - 使用预先存在的值进行 HashMap 初始化?

java - 如何在 JComboBox 顶部添加默认项目,如添加新项目

amazon-web-services - 如何将我的 http 网站转为 https

java - 安装了 Apache 和 Thrift 但 Netbeans 看不到导入 org.apache.thrift