title: Java getInputStream SocketTimeoutException instead of NoRouteToHostException
body: <p>I have an odd issue happening when trying to open multiple Input Streams (in separate threads) on Linux (RHEL).   The behaviour works as expected on windows.</p>
  
  <p>I am kicking off 3 threads to open https connections to 3 different servers.  All three are invalid IP addresses (in this test case), so I expect an NoRouteToHostException for each of them. The first two return these as expected, and quite quickly. (see stack trace below)  However the third (and 4th when I tested it that way) do NOT give a no route exception.   They wait for ages, and then give a SocketTimeoutException (see other stack trace below).  This takes ages to come back, and does not accurately express the connection issue.</p>
  
  <p>The offending line of code is:</p>
  
  <pre><code>reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
  </code></pre>
  
  <p>Has anyone seen something like this before?  Are there multi-threading issues with sockets on REHL or some limit somewhere to how many can connect at once...or...something?  </p>
  
  <p>Expected stack trace, as  received for first two:</p>
  
  <pre>java.net.NoRouteToHostException: No route to host
          at java.net.PlainSocketImpl.socketConnect(Native Method)
          at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
          at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
          at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
          at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
          at java.net.Socket.connect(Socket.java:529)
          at com.sun.net.ssl.internal.ssl.SSLSocketImpl.connect(SSLSocketImpl.java:559)
          at sun.net.NetworkClient.doConnect(NetworkClient.java:158)
          at sun.net.www.http.HttpClient.openServer(HttpClient.java:394)
          at sun.net.www.http.HttpClient.openServer(HttpClient.java:529)
          at sun.net.www.protocol.https.HttpsClient.(HttpsClient.java:272)
          at sun.net.www.protocol.https.HttpsClient.New(HttpsClient.java:329)
          at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.getNewHttpClient(AbstractDelegateHttpsURLConnection.java:172)
          at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:916)
          at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:158)
          at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1177)
          at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:234)
  </pre>
  
  <p>Unexpected stack trace, as received on 3rd:</p>
  
  <pre>java.net.SocketTimeoutException: connect timed out
          at java.net.PlainSocketImpl.socketConnect(Native Method)
          at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
          at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
          at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
          at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
          at java.net.Socket.connect(Socket.java:529)
          at com.sun.net.ssl.internal.ssl.SSLSocketImpl.connect(SSLSocketImpl.java:559)
          at sun.net.NetworkClient.doConnect(NetworkClient.java:158)
          at sun.net.www.http.HttpClient.openServer(HttpClient.java:394)
          at sun.net.www.http.HttpClient.openServer(HttpClient.java:529)
          at sun.net.www.protocol.https.HttpsClient.(HttpsClient.java:272)
          at sun.net.www.protocol.https.HttpsClient.New(HttpsClient.java:329)
          at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.getNewHttpClient(AbstractDelegateHttpsURLConnection.java:172)
          at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:916)
          at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:158)
          at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1177)
          at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:234)</pre>