Add flag --ip_version_for_host_lookup to quic_client to indicate the preferred IP version of host address, if host lookup is needed.
PiperOrigin-RevId: 333753224
Change-Id: I4333bb7bdfdafe592410458718f571c35f8d9abe
diff --git a/quic/tools/quic_client.cc b/quic/tools/quic_client.cc
index a9a9320..16499d2 100644
--- a/quic/tools/quic_client.cc
+++ b/quic/tools/quic_client.cc
@@ -32,9 +32,12 @@
namespace tools {
-QuicSocketAddress LookupAddress(std::string host, std::string port) {
+QuicSocketAddress LookupAddress(int address_family_for_lookup,
+ std::string host,
+ std::string port) {
addrinfo hint;
memset(&hint, 0, sizeof(hint));
+ hint.ai_family = address_family_for_lookup;
hint.ai_protocol = IPPROTO_UDP;
addrinfo* info_list = nullptr;
diff --git a/quic/tools/quic_client.h b/quic/tools/quic_client.h
index 7ce795d..ff01cec 100644
--- a/quic/tools/quic_client.h
+++ b/quic/tools/quic_client.h
@@ -31,7 +31,13 @@
namespace tools {
-QuicSocketAddress LookupAddress(std::string host, std::string port);
+QuicSocketAddress LookupAddress(int address_family_for_lookup,
+ std::string host,
+ std::string port);
+
+inline QuicSocketAddress LookupAddress(std::string host, std::string port) {
+ return LookupAddress(0, host, port);
+}
} // namespace tools
diff --git a/quic/tools/quic_epoll_client_factory.cc b/quic/tools/quic_epoll_client_factory.cc
index 38dc582..b7dbb07 100644
--- a/quic/tools/quic_epoll_client_factory.cc
+++ b/quic/tools/quic_epoll_client_factory.cc
@@ -20,12 +20,13 @@
std::unique_ptr<QuicSpdyClientBase> QuicEpollClientFactory::CreateClient(
std::string host_for_handshake,
std::string host_for_lookup,
+ int address_family_for_lookup,
uint16_t port,
ParsedQuicVersionVector versions,
const QuicConfig& config,
std::unique_ptr<ProofVerifier> verifier) {
- QuicSocketAddress addr =
- tools::LookupAddress(host_for_lookup, quiche::QuicheStrCat(port));
+ QuicSocketAddress addr = tools::LookupAddress(
+ address_family_for_lookup, host_for_lookup, quiche::QuicheStrCat(port));
if (!addr.IsInitialized()) {
QUIC_LOG(ERROR) << "Unable to resolve address: " << host_for_lookup;
return nullptr;
diff --git a/quic/tools/quic_epoll_client_factory.h b/quic/tools/quic_epoll_client_factory.h
index 392bd6c..84dbc98 100644
--- a/quic/tools/quic_epoll_client_factory.h
+++ b/quic/tools/quic_epoll_client_factory.h
@@ -16,6 +16,7 @@
std::unique_ptr<QuicSpdyClientBase> CreateClient(
std::string host_for_handshake,
std::string host_for_lookup,
+ int address_family_for_lookup,
uint16_t port,
ParsedQuicVersionVector versions,
const QuicConfig& config,
diff --git a/quic/tools/quic_toy_client.cc b/quic/tools/quic_toy_client.cc
index b42f967..3bd5834 100644
--- a/quic/tools/quic_toy_client.cc
+++ b/quic/tools/quic_toy_client.cc
@@ -41,6 +41,7 @@
// instructions at go/quic_client_binary_update
#include "net/third_party/quiche/src/quic/tools/quic_toy_client.h"
+#include <sys/socket.h>
#include <iostream>
#include <memory>
@@ -78,6 +79,12 @@
DEFINE_QUIC_COMMAND_LINE_FLAG(int32_t, port, 0, "The port to connect to.");
DEFINE_QUIC_COMMAND_LINE_FLAG(std::string,
+ ip_version_for_host_lookup,
+ "",
+ "Only used if host address lookup is needed. "
+ "4=ipv4; 6=ipv6; otherwise=don't care.");
+
+DEFINE_QUIC_COMMAND_LINE_FLAG(std::string,
body,
"",
"If set, send a POST with this body.");
@@ -259,9 +266,17 @@
ParseQuicTagVector(client_connection_options_string));
}
+ int address_family_for_lookup = AF_UNSPEC;
+ if (GetQuicFlag(FLAGS_ip_version_for_host_lookup) == "4") {
+ address_family_for_lookup = AF_INET;
+ } else if (GetQuicFlag(FLAGS_ip_version_for_host_lookup) == "6") {
+ address_family_for_lookup = AF_INET6;
+ }
+
// Build the client, and try to connect.
std::unique_ptr<QuicSpdyClientBase> client = client_factory_->CreateClient(
- url.host(), host, port, versions, config, std::move(proof_verifier));
+ url.host(), host, address_family_for_lookup, port, versions, config,
+ std::move(proof_verifier));
if (client == nullptr) {
std::cerr << "Failed to create client." << std::endl;
diff --git a/quic/tools/quic_toy_client.h b/quic/tools/quic_toy_client.h
index d9d8eca..bf56bf8 100644
--- a/quic/tools/quic_toy_client.h
+++ b/quic/tools/quic_toy_client.h
@@ -24,6 +24,8 @@
virtual std::unique_ptr<QuicSpdyClientBase> CreateClient(
std::string host_for_handshake,
std::string host_for_lookup,
+ // AF_INET, AF_INET6, or AF_UNSPEC(=don't care).
+ int address_family_for_lookup,
uint16_t port,
ParsedQuicVersionVector versions,
const QuicConfig& config,