From a58d48b88b7e20352cf22ed76426375bd9ba7303 Mon Sep 17 00:00:00 2001 From: Sergey Abramchuk Date: Fri, 15 Mar 2019 12:20:19 +0300 Subject: [PATCH] Apply asio patches --- .../asio/asio/include/asio/basic_socket.hpp | 7 +++++++ .../include/asio/detail/impl/socket_ops.ipp | 17 +++++++++++++++++ .../include/asio/ip/basic_resolver_results.hpp | 7 +++++++ 3 files changed, 31 insertions(+) diff --git a/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/basic_socket.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/basic_socket.hpp index 4343016..0d1b0d2 100644 --- a/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/basic_socket.hpp +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/basic_socket.hpp @@ -865,6 +865,8 @@ public: asio::error_code ec; const protocol_type protocol = peer_endpoint.protocol(); this->get_service().open(this->get_implementation(), protocol, ec); + if (!ec) + async_connect_post_open(protocol, ec); if (ec) { async_completionai_family == AF_INET6) + { + sockaddr_in6* a6 = (sockaddr_in6*)(*result)->ai_addr; + if (a6->sin6_scope_id && !(IN6_IS_ADDR_LINKLOCAL(&a6->sin6_addr) || IN6_IS_ADDR_MC_NODELOCAL(&a6->sin6_addr) || IN6_IS_ADDR_MC_LINKLOCAL(&a6->sin6_addr))) + a6->sin6_scope_id = 0; + } + return ec = translate_addrinfo_error(error); #else int error = ::getaddrinfo(host, service, &hints, result); diff --git a/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ip/basic_resolver_results.hpp b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ip/basic_resolver_results.hpp index 4146a46..f0ae258 100644 --- a/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ip/basic_resolver_results.hpp +++ b/Sources/OpenVPNAdapter/Libraries/Vendors/asio/asio/include/asio/ip/basic_resolver_results.hpp @@ -18,6 +18,7 @@ #include "asio/detail/config.hpp" #include #include +#include #include "asio/detail/socket_ops.hpp" #include "asio/detail/socket_types.hpp" #include "asio/ip/basic_resolver_iterator.hpp" @@ -299,6 +300,12 @@ public: return !a.equal(b); } + template + void randomize(Random& r) + { + std::shuffle(this->values_->begin(), this->values_->end(), r); + } + private: typedef std::vector > values_type; };