### What happened?

Using JDK 11 Http Client prevents reusing of DevTools instance. Earlier, this was not a problem since Selenium used a single instance of AsyncHttpClient and it was only closed when the JVM shuts down. But with the JdkHttpClient, Selenium uses a new instance each time and closes it too. 
Changes made as part of https://github.com/SeleniumHQ/selenium/pull/11345, which assigns the client to null while closing causes an NPE when re-using DevTools instance. The changes were made to prevent memory leaks. 

I am not sure about the right approach to address this. I will need to look into it further.

### How can we reproduce the issue?

```shell
Run https://github.com/SeleniumHQ/selenium/blob/trunk/java/test/org/openqa/selenium/devtools/DevToolsReuseTest.java with JDK 11 Http Client
```


### Relevant log output

```shell
Cannot invoke "java.net.http.HttpClient.newWebSocketBuilder()" because "this.client" is null
java.lang.NullPointerException: 
	at org.openqa.selenium.remote.http.jdk.JdkHttpClient.openSocket(JdkHttpClient.java:168)
	at org.openqa.selenium.devtools.Connection.reopen(Connection.java:92)
	at org.openqa.selenium.devtools.DevTools.createSession(DevTools.java:129)
	at org.openqa.selenium.devtools.DevTools.createSession(DevTools.java:117)
	at org.openqa.selenium.devtools.DevToolsReuseTest.shouldBeAbleToCloseDevToolsAndCreateNewInstance(DevToolsReuseTest.java:41)
	at java.base/java.lang.reflect.Method.invoke(Method.java:568)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
```


### Operating System

macOS Ventura

### Selenium version

Java 4.13.0

### What are the browser(s) and version(s) where you see this issue?

Chrome  117

### What are the browser driver(s) and version(s) where you see this issue?

ChromeDriver Version: 117.0.5938.149

### Are you using Selenium Grid?

_No response_
public Connection(HttpClient client, String url) {
    Require.nonNull("HTTP client", client);
    Require.nonNull("URL to connect to", url);
    this.url = url;
    this.client = client;
    this.socket = this.client.openSocket(new HttpRequest(GET, url), new Listener());
    this.isClosed = new AtomicBoolean();
  }
  boolean isClosed() {
    return isClosed.get();
  }
  void reopen() {
    this.socket = this.client.openSocket(new HttpRequest(GET, url), new Listener());
  }
  private static class NamedConsumer<X> implements Consumer<X> {
    private final String name;
    private final Consumer<X> delegate;
    private NamedConsumer(String name, Consumer<X> delegate) {
      this.name = name;
      this.delegate = delegate;
    }
    public static <X> Consumer<X> of(String name, Consumer<X> delegate) {
      return new NamedConsumer<>(name, delegate);
    }
    @Override
    public void accept(X x) {
      delegate.accept(x);
    }
    @Override
    public String toString() {