Build quic_server in iOS/Android presubmits

PiperOrigin-RevId: 468763588
diff --git a/build/source_list.bzl b/build/source_list.bzl
index 9092865..225a563 100644
--- a/build/source_list.bzl
+++ b/build/source_list.bzl
@@ -701,6 +701,7 @@
     "quic/tools/quic_client_default_network_helper.h",
     "quic/tools/quic_default_client.h",
     "quic/tools/quic_memory_cache_backend.h",
+    "quic/tools/quic_name_lookup.h",
     "quic/tools/quic_server_factory.h",
     "quic/tools/quic_simple_client_session.h",
     "quic/tools/quic_simple_client_stream.h",
@@ -725,6 +726,7 @@
     "quic/tools/quic_client_default_network_helper.cc",
     "quic/tools/quic_default_client.cc",
     "quic/tools/quic_memory_cache_backend.cc",
+    "quic/tools/quic_name_lookup.cc",
     "quic/tools/quic_server_factory.cc",
     "quic/tools/quic_simple_client_session.cc",
     "quic/tools/quic_simple_client_stream.cc",
diff --git a/build/source_list.gni b/build/source_list.gni
index e06888f..de22a2a 100644
--- a/build/source_list.gni
+++ b/build/source_list.gni
@@ -701,6 +701,7 @@
     "src/quiche/quic/tools/quic_client_default_network_helper.h",
     "src/quiche/quic/tools/quic_default_client.h",
     "src/quiche/quic/tools/quic_memory_cache_backend.h",
+    "src/quiche/quic/tools/quic_name_lookup.h",
     "src/quiche/quic/tools/quic_server_factory.h",
     "src/quiche/quic/tools/quic_simple_client_session.h",
     "src/quiche/quic/tools/quic_simple_client_stream.h",
@@ -725,6 +726,7 @@
     "src/quiche/quic/tools/quic_client_default_network_helper.cc",
     "src/quiche/quic/tools/quic_default_client.cc",
     "src/quiche/quic/tools/quic_memory_cache_backend.cc",
+    "src/quiche/quic/tools/quic_name_lookup.cc",
     "src/quiche/quic/tools/quic_server_factory.cc",
     "src/quiche/quic/tools/quic_simple_client_session.cc",
     "src/quiche/quic/tools/quic_simple_client_stream.cc",
diff --git a/build/source_list.json b/build/source_list.json
index 0811079..7c929bf 100644
--- a/build/source_list.json
+++ b/build/source_list.json
@@ -700,6 +700,7 @@
     "quiche/quic/tools/quic_client_default_network_helper.h",
     "quiche/quic/tools/quic_default_client.h",
     "quiche/quic/tools/quic_memory_cache_backend.h",
+    "quiche/quic/tools/quic_name_lookup.h",
     "quiche/quic/tools/quic_server_factory.h",
     "quiche/quic/tools/quic_simple_client_session.h",
     "quiche/quic/tools/quic_simple_client_stream.h",
@@ -724,6 +725,7 @@
     "quiche/quic/tools/quic_client_default_network_helper.cc",
     "quiche/quic/tools/quic_default_client.cc",
     "quiche/quic/tools/quic_memory_cache_backend.cc",
+    "quiche/quic/tools/quic_name_lookup.cc",
     "quiche/quic/tools/quic_server_factory.cc",
     "quiche/quic/tools/quic_simple_client_session.cc",
     "quiche/quic/tools/quic_simple_client_stream.cc",
diff --git a/quiche/quic/core/io/socket_posix.cc b/quiche/quic/core/io/socket_posix.cc
index 59f286b..b69f6cc 100644
--- a/quiche/quic/core/io/socket_posix.cc
+++ b/quiche/quic/core/io/socket_posix.cc
@@ -15,6 +15,15 @@
 #include "quiche/quic/platform/api/quic_ip_address_family.h"
 #include "quiche/common/platform/api/quiche_logging.h"
 
+// accept4() is a Linux-specific extension that is available in glibc 2.10+.
+#if defined(__linux__) && defined(_GNU_SOURCE) && defined(__GLIBC_PREREQ)
+#if __GLIBC_PREREQ(2, 10)
+#define HAS_ACCEPT4 1
+#else
+#define HAS_ACCEPT4 0
+#endif
+#endif
+
 namespace quic::socket_api {
 
 namespace {
@@ -171,7 +180,7 @@
   }
 }
 
-#if defined(__linux__) && defined(SOCK_NONBLOCK)
+#if HAS_ACCEPT4
 absl::StatusOr<AcceptResult> AcceptWithFlags(SocketFd fd, int flags) {
   QUICHE_DCHECK_GE(fd, 0);
 
@@ -200,7 +209,7 @@
     return peer_address.status();
   }
 }
-#endif  // defined(__linux__) && defined(SOCK_NONBLOCK)
+#endif  // HAS_ACCEPT4
 
 socklen_t GetAddrlen(IpAddressFamily family) {
   switch (family) {
@@ -409,7 +418,7 @@
 absl::StatusOr<AcceptResult> Accept(SocketFd fd, bool blocking) {
   QUICHE_DCHECK_GE(fd, 0);
 
-#if defined(__linux__) && defined(SOCK_NONBLOCK)
+#if HAS_ACCEPT4
   if (!blocking) {
     return AcceptWithFlags(fd, SOCK_NONBLOCK);
   }
diff --git a/quiche/quic/tools/connect_tunnel.cc b/quiche/quic/tools/connect_tunnel.cc
index ef2a5eb..e86d628 100644
--- a/quiche/quic/tools/connect_tunnel.cc
+++ b/quiche/quic/tools/connect_tunnel.cc
@@ -22,7 +22,7 @@
 #include "quiche/quic/core/quic_error_codes.h"
 #include "quiche/quic/platform/api/quic_socket_address.h"
 #include "quiche/quic/tools/quic_backend_response.h"
-#include "quiche/quic/tools/quic_client.h"
+#include "quiche/quic/tools/quic_name_lookup.h"
 #include "quiche/quic/tools/quic_simple_server_backend.h"
 #include "quiche/common/platform/api/quiche_logging.h"
 #include "quiche/common/platform/api/quiche_mem_slice.h"
diff --git a/quiche/quic/tools/quic_client.cc b/quiche/quic/tools/quic_client.cc
index b3e4705..c6de357 100644
--- a/quiche/quic/tools/quic_client.cc
+++ b/quiche/quic/tools/quic_client.cc
@@ -4,14 +4,6 @@
 
 #include "quiche/quic/tools/quic_client.h"
 
-#include <errno.h>
-#include <netdb.h>
-#include <netinet/in.h>
-#include <string.h>
-#include <sys/epoll.h>
-#include <sys/socket.h>
-#include <sys/types.h>
-
 #include <utility>
 
 #include "quiche/quic/core/crypto/quic_random.h"
@@ -29,31 +21,6 @@
 
 namespace quic {
 
-namespace tools {
-
-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;
-  int result = getaddrinfo(host.c_str(), port.c_str(), &hint, &info_list);
-  if (result != 0) {
-    QUIC_LOG(ERROR) << "Failed to look up " << host << ": "
-                    << gai_strerror(result);
-    return QuicSocketAddress();
-  }
-
-  QUICHE_CHECK(info_list != nullptr);
-  std::unique_ptr<addrinfo, void (*)(addrinfo*)> info_list_owned(info_list,
-                                                                 freeaddrinfo);
-  return QuicSocketAddress(info_list->ai_addr, info_list->ai_addrlen);
-}
-
-}  // namespace tools
-
 QuicClient::QuicClient(QuicSocketAddress server_address,
                        const QuicServerId& server_id,
                        const ParsedQuicVersionVector& supported_versions,
diff --git a/quiche/quic/tools/quic_client.h b/quiche/quic/tools/quic_client.h
index e0106c7..e878a8e 100644
--- a/quiche/quic/tools/quic_client.h
+++ b/quiche/quic/tools/quic_client.h
@@ -18,6 +18,7 @@
 #include "quiche/quic/core/quic_packet_reader.h"
 #include "quiche/quic/platform/api/quic_epoll.h"
 #include "quiche/quic/tools/quic_client_epoll_network_helper.h"
+#include "quiche/quic/tools/quic_name_lookup.h"
 #include "quiche/quic/tools/quic_spdy_client_base.h"
 
 namespace quic {
@@ -28,17 +29,6 @@
 class QuicClientPeer;
 }  // namespace test
 
-namespace tools {
-
-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
-
 class QuicClient : public QuicSpdyClientBase {
  public:
   // These will create their own QuicClientEpollNetworkHelper.
diff --git a/quiche/quic/tools/quic_name_lookup.cc b/quiche/quic/tools/quic_name_lookup.cc
new file mode 100644
index 0000000..5098e80
--- /dev/null
+++ b/quiche/quic/tools/quic_name_lookup.cc
@@ -0,0 +1,36 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "quiche/quic/tools/quic_name_lookup.h"
+
+#include <netdb.h>
+#include <sys/socket.h>
+#include <sys/types.h>
+
+#include "quiche/quic/platform/api/quic_logging.h"
+
+namespace quic::tools {
+
+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;
+  int result = getaddrinfo(host.c_str(), port.c_str(), &hint, &info_list);
+  if (result != 0) {
+    QUIC_LOG(ERROR) << "Failed to look up " << host << ": "
+                    << gai_strerror(result);
+    return QuicSocketAddress();
+  }
+
+  QUICHE_CHECK(info_list != nullptr);
+  std::unique_ptr<addrinfo, void (*)(addrinfo*)> info_list_owned(info_list,
+                                                                 freeaddrinfo);
+  return QuicSocketAddress(info_list->ai_addr, info_list->ai_addrlen);
+}
+
+}  // namespace quic::tools
diff --git a/quiche/quic/tools/quic_name_lookup.h b/quiche/quic/tools/quic_name_lookup.h
new file mode 100644
index 0000000..99a69b1
--- /dev/null
+++ b/quiche/quic/tools/quic_name_lookup.h
@@ -0,0 +1,23 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef QUICHE_QUIC_TOOLS_QUIC_NAME_LOOKUP_H_
+#define QUICHE_QUIC_TOOLS_QUIC_NAME_LOOKUP_H_
+
+#include <string>
+
+#include "quiche/quic/platform/api/quic_socket_address.h"
+
+namespace quic::tools {
+
+quic::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 quic::tools
+
+#endif  // QUICHE_QUIC_TOOLS_QUIC_NAME_LOOKUP_H_
diff --git a/quiche/quic/tools/quic_server.cc b/quiche/quic/tools/quic_server.cc
index b318cfd..aace378 100644
--- a/quiche/quic/tools/quic_server.cc
+++ b/quiche/quic/tools/quic_server.cc
@@ -4,13 +4,6 @@
 
 #include "quiche/quic/tools/quic_server.h"
 
-#include <errno.h>
-#include <features.h>
-#include <netinet/in.h>
-#include <string.h>
-#include <sys/epoll.h>
-#include <sys/socket.h>
-
 #include <cstdint>
 #include <memory>