title: IO Error: Socket read timed out. What are the reasons?
body: <p>My simplified code (which demonstrates that the connection breaks with error "IO Error: Socket read timed out"):</p>
  
  <pre><code>    DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
      this.connection = DriverManager.getConnection("jdbc:oracle:thin:@", properties);
      while(isStarted){
          this.statement = this.connection.createStatement();
          ResultSet result = this.statement.executeQuery("select sysdate from dual");
          result.next();
          System.out.println("Sysdate: " + result.getString(1));
          result.close();
          this.statement.close();
          this.statement = null;
          TimeUnit.SECONDS.sleep(4);
      }
      this.connection.close();
      this.connection = null;
  </code></pre>
  
  <p>after 4-5 hours i catched:</p>
  
  <pre><code> IO Error: Socket read timed out
      java.sql.SQLRecoverableException: IO Error: Socket read timed out
  at oracle.jdbc.driver.T4CStatement.executeForDescribe(T4CStatement.java:886)
  at oracle.jdbc.driver.OracleStatement.executeMaybeDescribe(OracleStatement.java:1167)
  at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1289)
  at oracle.jdbc.driver.OracleStatement.executeQuery(OracleStatement.java:1491)
  at oracle.jdbc.driver.OracleStatementWrapper.executeQuery(OracleStatementWrapper.java:406)
  </code></pre>
  
  <p>What are the reasons? how to solve this problem?</p>