diff --git a/quic/tools/quic_client.cc b/quic/tools/quic_client.cc
index 50ba040..a9a9320 100644
--- a/quic/tools/quic_client.cc
+++ b/quic/tools/quic_client.cc
@@ -84,6 +84,23 @@
           std::move(proof_verifier),
           std::move(session_cache)) {}
 
+QuicClient::QuicClient(QuicSocketAddress server_address,
+                       const QuicServerId& server_id,
+                       const ParsedQuicVersionVector& supported_versions,
+                       const QuicConfig& config,
+                       QuicEpollServer* epoll_server,
+                       std::unique_ptr<ProofVerifier> proof_verifier,
+                       std::unique_ptr<SessionCache> session_cache)
+    : QuicClient(
+          server_address,
+          server_id,
+          supported_versions,
+          config,
+          epoll_server,
+          QuicWrapUnique(new QuicClientEpollNetworkHelper(epoll_server, this)),
+          std::move(proof_verifier),
+          std::move(session_cache)) {}
+
 QuicClient::QuicClient(
     QuicSocketAddress server_address,
     const QuicServerId& server_id,
diff --git a/quic/tools/quic_client.h b/quic/tools/quic_client.h
index 10c61f3..7ce795d 100644
--- a/quic/tools/quic_client.h
+++ b/quic/tools/quic_client.h
@@ -49,6 +49,13 @@
              QuicEpollServer* epoll_server,
              std::unique_ptr<ProofVerifier> proof_verifier,
              std::unique_ptr<SessionCache> session_cache);
+  QuicClient(QuicSocketAddress server_address,
+             const QuicServerId& server_id,
+             const ParsedQuicVersionVector& supported_versions,
+             const QuicConfig& config,
+             QuicEpollServer* epoll_server,
+             std::unique_ptr<ProofVerifier> proof_verifier,
+             std::unique_ptr<SessionCache> session_cache);
   // This will take ownership of a passed in network primitive.
   QuicClient(QuicSocketAddress server_address,
              const QuicServerId& server_id,
diff --git a/quic/tools/quic_client_interop_test_bin.cc b/quic/tools/quic_client_interop_test_bin.cc
index 03d32a5..0ea2c7c 100644
--- a/quic/tools/quic_client_interop_test_bin.cc
+++ b/quic/tools/quic_client_interop_test_bin.cc
@@ -163,9 +163,12 @@
   auto session_cache = std::make_unique<test::SimpleSessionCache>();
   QuicEpollServer epoll_server;
   QuicEpollClock epoll_clock(&epoll_server);
+  QuicConfig config;
+  QuicTime::Delta timeout = QuicTime::Delta::FromSeconds(20);
+  config.SetIdleNetworkTimeout(timeout, timeout);
   auto client = std::make_unique<QuicClient>(
-      addr, server_id, versions, &epoll_server, std::move(proof_verifier),
-      std::move(session_cache));
+      addr, server_id, versions, config, &epoll_server,
+      std::move(proof_verifier), std::move(session_cache));
   client->set_connection_debug_visitor(this);
   if (!client->Initialize()) {
     QUIC_LOG(ERROR) << "Failed to initialize client";
@@ -202,18 +205,7 @@
   header_block[":authority"] = authority;
   header_block[":path"] = "/";
   client->set_store_response(true);
-  client->SendRequest(header_block, "", /*fin=*/true);
-
-  const QuicTime request_start_time = epoll_clock.Now();
-  static const auto request_timeout = QuicTime::Delta::FromSeconds(20);
-  bool request_timed_out = false;
-  while (client->WaitForEvents()) {
-    if (epoll_clock.Now() - request_start_time >= request_timeout) {
-      QUIC_LOG(ERROR) << "Timed out waiting for HTTP response";
-      request_timed_out = true;
-      break;
-    }
-  }
+  client->SendRequestAndWaitForResponse(header_block, "", /*fin=*/true);
 
   client_stats = connection->GetStats();
   QuicSentPacketManager* sent_packet_manager =
@@ -226,7 +218,7 @@
     InsertFeature(Feature::kStreamData);
   }
 
-  if (request_timed_out || !client->connected()) {
+  if (!client->connected()) {
     return;
   }
 
@@ -240,17 +232,12 @@
     if (attempt_rebind) {
       // Now make a second request after switching to a different client port.
       if (client->ChangeEphemeralPort()) {
-        client->SendRequest(header_block, "", /*fin=*/true);
-
-        const QuicTime second_request_start_time = epoll_clock.Now();
-        while (client->WaitForEvents()) {
-          if (epoll_clock.Now() - second_request_start_time >=
-              request_timeout) {
-            // Rebinding does not work, retry without attempting it.
-            AttemptRequest(addr, authority, server_id, test_version_negotiation,
-                           /*attempt_rebind=*/false);
-            return;
-          }
+        client->SendRequestAndWaitForResponse(header_block, "", /*fin=*/true);
+        if (!client->connected()) {
+          // Rebinding does not work, retry without attempting it.
+          AttemptRequest(addr, authority, server_id, test_version_negotiation,
+                         /*attempt_rebind=*/false);
+          return;
         }
         InsertFeature(Feature::kRebinding);
 
