Add ip::tls_tcp protocol.
diff --git a/asio/include/Makefile.am b/asio/include/Makefile.am
index c3b7124..eea22c8 100644
--- a/asio/include/Makefile.am
+++ b/asio/include/Makefile.am
@@ -437,6 +437,7 @@
asio/ip/impl/network_v6.hpp \
asio/ip/impl/network_v6.ipp \
asio/ip/impl/tcp.ipp \
+ asio/ip/impl/tls_tcp.ipp \
asio/ip/impl/udp.ipp \
asio/ip/multicast.hpp \
asio/ip/network_v4.hpp \
diff --git a/asio/include/asio.hpp b/asio/include/asio.hpp
index 8e5252c..4f3203c 100644
--- a/asio/include/asio.hpp
+++ b/asio/include/asio.hpp
@@ -119,6 +119,7 @@
#include "asio/ip/resolver_base.hpp"
#include "asio/ip/resolver_query_base.hpp"
#include "asio/ip/tcp.hpp"
+#include "asio/ip/tls_tcp.hpp"
#include "asio/ip/udp.hpp"
#include "asio/ip/unicast.hpp"
#include "asio/ip/v6_only.hpp"
diff --git a/asio/include/asio/impl/src.hpp b/asio/include/asio/impl/src.hpp
index 948c6b7..a5a4ee7 100644
--- a/asio/include/asio/impl/src.hpp
+++ b/asio/include/asio/impl/src.hpp
@@ -83,6 +83,7 @@
#include "asio/ip/impl/network_v4.ipp"
#include "asio/ip/impl/network_v6.ipp"
#include "asio/ip/impl/tcp.ipp"
+#include "asio/ip/impl/tls_tcp.ipp"
#include "asio/ip/impl/udp.ipp"
#include "asio/ip/detail/impl/endpoint.ipp"
#include "asio/local/detail/impl/endpoint.ipp"
diff --git a/asio/include/asio/ip/impl/tls_tcp.ipp b/asio/include/asio/ip/impl/tls_tcp.ipp
new file mode 100644
index 0000000..b85248c
--- /dev/null
+++ b/asio/include/asio/ip/impl/tls_tcp.ipp
@@ -0,0 +1,58 @@
+//
+// ip/impl/tls_tcp.ipp
+// ~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2021 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef ASIO_IP_IMPL_TLS_TCP_IPP
+#define ASIO_IP_IMPL_TLS_TCP_IPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include "asio/detail/config.hpp"
+
+#if defined(ASIO_HAS_APPLE_NETWORK_FRAMEWORK)
+
+#include "asio/ip/tls_tcp.hpp"
+
+#include "asio/detail/push_options.hpp"
+
+namespace asio {
+namespace ip {
+
+asio::detail::apple_nw_ptr<nw_parameters_t>
+tls_tcp::apple_nw_create_parameters() const
+{
+ asio::detail::apple_nw_ptr<nw_parameters_t> parameters(
+ nw_parameters_create_secure_tcp(
+ NW_PARAMETERS_DEFAULT_CONFIGURATION,
+ NW_PARAMETERS_DEFAULT_CONFIGURATION));
+
+ asio::detail::apple_nw_ptr<nw_protocol_stack_t> protocol_stack(
+ nw_parameters_copy_default_protocol_stack(parameters));
+
+ asio::detail::apple_nw_ptr<nw_protocol_options_t> ip_options(
+ nw_protocol_stack_copy_internet_protocol(protocol_stack));
+
+ if (family_ == ASIO_OS_DEF(AF_INET))
+ nw_ip_options_set_version(ip_options, nw_ip_version_4);
+ else if (family_ == ASIO_OS_DEF(AF_INET6))
+ nw_ip_options_set_version(ip_options, nw_ip_version_6);
+
+ return parameters;
+}
+
+} // namespace ip
+} // namespace asio
+
+#include "asio/detail/pop_options.hpp"
+
+#endif // defined(ASIO_HAS_APPLE_NETWORK_FRAMEWORK)
+
+#endif // ASIO_IP_IMPL_TLS_TCP_IPP
diff --git a/asio/include/asio/ip/tls_tcp.hpp b/asio/include/asio/ip/tls_tcp.hpp
new file mode 100644
index 0000000..56c927f
--- /dev/null
+++ b/asio/include/asio/ip/tls_tcp.hpp
@@ -0,0 +1,143 @@
+//
+// ip/tls_tcp.hpp
+// ~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2021 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef ASIO_IP_TLS_TCP_HPP
+#define ASIO_IP_TLS_TCP_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include "asio/detail/config.hpp"
+
+#if defined(ASIO_HAS_APPLE_NETWORK_FRAMEWORK)
+
+#include "asio/basic_socket_acceptor.hpp"
+#include "asio/basic_stream_socket.hpp"
+#include "asio/detail/apple_nw_ptr.hpp"
+#include "asio/detail/socket_types.hpp"
+#include "asio/ip/basic_endpoint.hpp"
+#include "asio/ip/basic_resolver.hpp"
+#include "asio/ip/basic_resolver_iterator.hpp"
+#include "asio/ip/basic_resolver_query.hpp"
+#include <Network/Network.h>
+
+#include "asio/detail/push_options.hpp"
+
+namespace asio {
+namespace ip {
+
+/// Encapsulates the flags needed for TCP.
+/**
+ * The asio::ip::tls_tcp class contains flags necessary for TLS/TCP
+ * sockets.
+ *
+ * @par Thread Safety
+ * @e Distinct @e objects: Safe.@n
+ * @e Shared @e objects: Safe.
+ *
+ * @par Concepts:
+ * Protocol, InternetProtocol.
+ */
+class tls_tcp
+{
+public:
+ /// The type of a TLS/TCP endpoint.
+ typedef basic_endpoint<tls_tcp> endpoint;
+
+ /// Construct to represent the IPv4 TLS/TCP protocol.
+ static tls_tcp v4() ASIO_NOEXCEPT
+ {
+ return tls_tcp(ASIO_OS_DEF(AF_INET));
+ }
+
+ /// Construct to represent the IPv6 TLS/TCP protocol.
+ static tls_tcp v6() ASIO_NOEXCEPT
+ {
+ return tls_tcp(ASIO_OS_DEF(AF_INET6));
+ }
+
+ /// Construct to represent an unspecified TLS/TCP protocol.
+ static tls_tcp any() ASIO_NOEXCEPT
+ {
+ return tls_tcp(ASIO_OS_DEF(AF_UNSPEC));
+ }
+
+ /// Obtain an identifier for the type of the protocol.
+ int type() const ASIO_NOEXCEPT
+ {
+ return ASIO_OS_DEF(SOCK_STREAM);
+ }
+
+ /// Obtain an identifier for the protocol.
+ int protocol() const ASIO_NOEXCEPT
+ {
+ return ASIO_OS_DEF(IPPROTO_TCP);
+ }
+
+ /// Obtain an identifier for the protocol family.
+ int family() const ASIO_NOEXCEPT
+ {
+ return family_;
+ }
+
+ // Obtain parameters to be used when creating a new connection or listener.
+ ASIO_DECL asio::detail::apple_nw_ptr<nw_parameters_t>
+ apple_nw_create_parameters() const;
+
+ // Obtain the override value for the maximum receive size.
+ std::size_t apple_nw_max_receive_size() const ASIO_NOEXCEPT
+ {
+ return 0;
+ }
+
+ /// The TCP socket type.
+ typedef basic_stream_socket<tls_tcp> socket;
+
+ /// The TCP acceptor type.
+ typedef basic_socket_acceptor<tls_tcp> acceptor;
+
+ /// The TCP resolver type.
+ typedef basic_resolver<tls_tcp> resolver;
+
+ /// Compare two protocols for equality.
+ friend bool operator==(const tls_tcp& p1, const tls_tcp& p2)
+ {
+ return p1.family_ == p2.family_;
+ }
+
+ /// Compare two protocols for inequality.
+ friend bool operator!=(const tls_tcp& p1, const tls_tcp& p2)
+ {
+ return p1.family_ != p2.family_;
+ }
+
+private:
+ // Construct with a specific family.
+ explicit tls_tcp(int protocol_family) ASIO_NOEXCEPT
+ : family_(protocol_family)
+ {
+ }
+
+ int family_;
+};
+
+} // namespace ip
+} // namespace asio
+
+#include "asio/detail/pop_options.hpp"
+
+#if defined(ASIO_HEADER_ONLY)
+# include "asio/ip/impl/tls_tcp.ipp"
+#endif // defined(ASIO_HEADER_ONLY)
+
+#endif // defined(ASIO_HAS_APPLE_NETWORK_FRAMEWORK)
+
+#endif // ASIO_IP_TLS_TCP_HPP