title: Does java.net.http.HttpClient need closing?
body: <p>I'm using the new <code>java.net.http.HttpClient</code> and from my tests after about 378026 times of calling it, I start to get the following:</p>
  <pre><code>Caused by: java.net.ConnectException: Cannot assign requested address
          at java.net.http/jdk.internal.net.http.common.Utils.toConnectException(Utils.java:964)
          at java.net.http/jdk.internal.net.http.PlainHttpConnection.connectAsync(PlainHttpConnection.java:179)
          at java.net.http/jdk.internal.net.http.AsyncSSLConnection.connectAsync(AsyncSSLConnection.java:56)
          at java.net.http/jdk.internal.net.http.Http2Connection.createAsync(Http2Connection.java:369)
          at java.net.http/jdk.internal.net.http.Http2ClientImpl.getConnectionFor(Http2ClientImpl.java:127)
          at java.net.http/jdk.internal.net.http.ExchangeImpl.get(ExchangeImpl.java:88)
          at java.net.http/jdk.internal.net.http.Exchange.establishExchange(Exchange.java:293)
          at java.net.http/jdk.internal.net.http.Exchange.responseAsyncImpl0(Exchange.java:425)
          at java.net.http/jdk.internal.net.http.Exchange.responseAsyncImpl(Exchange.java:330)
          at java.net.http/jdk.internal.net.http.Exchange.responseAsync(Exchange.java:322)
          at java.net.http/jdk.internal.net.http.MultiExchange.responseAsyncImpl(MultiExchange.java:304)
          at java.net.http/jdk.internal.net.http.MultiExchange.lambda$responseAsync0$2(MultiExchange.java:250)
          at java.base/java.util.concurrent.CompletableFuture$UniCompose.tryFire(CompletableFuture.java:1072)
          at java.base/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:506)
          at java.base/java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1705)
          at java.net.http/jdk.internal.net.http.HttpClientImpl$DelegatingExecutor.execute(HttpClientImpl.java:153)
          at java.base/java.util.concurrent.CompletableFuture.completeAsync(CompletableFuture.java:2591)
          at java.net.http/jdk.internal.net.http.MultiExchange.responseAsync(MultiExchange.java:204)
          at java.net.http/jdk.internal.net.http.HttpClientImpl.sendAsync(HttpClientImpl.java:632)
  </code></pre>
  <p>Below is the class that I use:</p>
  <pre><code>public class JavaHttpClient {
      HttpClient httpClient = HttpClient.newBuilder().connectTimeout(Duration.ofSeconds(30))
              .followRedirects(HttpClient.Redirect.ALWAYS).build();
  
      public String getRequest(String incomingUrl) throws IOException, InterruptedException {
          HttpRequest request = HttpRequest.newBuilder().uri(URI.create(incomingUrl)).GET().build();
          HttpResponse&lt;String&gt; response = httpClient.send(request, BodyHandlers.ofString());
  
          return response.body();
      }
  
  }
  </code></pre>
  <p>I don't understand why this is happening. I assume something is being left open that should have been closed?</p>