Java SSLServerSocket soTimeout не работает? - PullRequest
0 голосов
/ 24 февраля 2012

Я использую сервер Apache Thrift, написанный на Java. Когда я создаю ServerSocket, я передаю параметр под названием clientTimeout со значением 60000 (десять минут). Но это не работает, как ожидалось - я подключился к серверу, выполнил метод, подождал 11 минут, выполнил метод снова без повторного подключения и не получил ошибку (как я и ожидал). Я пытаюсь сделать это на сервере не SSL, это работает нормально. В экономичных источниках я нашел способ создания сокета 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);
    }
  }

есть у кого такая проблема? Как это исправить?

1 Ответ

2 голосов
/ 24 февраля 2012

Тайм-аут на ServerSocket влияет только на ServerSocket.accept(). Он не наследуется принятым Sockets как тайм-аут чтения. Если вы хотите это, вы должны установить это явно. В этом разница между API Java и API сокетов BSD.

...