passenger 6.0.23 → 6.0.24
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG +26 -1
- data/Rakefile +7 -3
- data/bin/passenger-install-apache2-module +5 -0
- data/bin/passenger-install-nginx-module +17 -2
- data/build/apache2.rb +1 -1
- data/build/basics.rb +10 -4
- data/build/cxx_tests.rb +18 -7
- data/build/support/cxx_dependency_map.rb +40 -6
- data/build/test_basics.rb +4 -12
- data/package.json +1 -1
- data/passenger.gemspec +1 -1
- data/src/agent/Core/ApplicationPool/Group/InitializationAndShutdown.cpp +8 -0
- data/src/agent/Core/ApplicationPool/Group/InternalUtils.cpp +10 -2
- data/src/agent/Core/ApplicationPool/Group/LifetimeAndBasics.cpp +8 -0
- data/src/agent/Core/ApplicationPool/Group/Miscellaneous.cpp +9 -0
- data/src/agent/Core/ApplicationPool/Group/OutOfBandWork.cpp +9 -0
- data/src/agent/Core/ApplicationPool/Group/ProcessListManagement.cpp +63 -50
- data/src/agent/Core/ApplicationPool/Group/SessionManagement.cpp +19 -9
- data/src/agent/Core/ApplicationPool/Group/SpawningAndRestarting.cpp +8 -0
- data/src/agent/Core/ApplicationPool/Group/StateInspection.cpp +8 -0
- data/src/agent/Core/ApplicationPool/Group/Verification.cpp +8 -0
- data/src/agent/Core/ApplicationPool/Group.h +15 -5
- data/src/agent/Core/ApplicationPool/Pool/AnalyticsCollection.cpp +5 -0
- data/src/agent/Core/ApplicationPool/Pool/GarbageCollection.cpp +5 -0
- data/src/agent/Core/ApplicationPool/Pool/GeneralUtils.cpp +5 -0
- data/src/agent/Core/ApplicationPool/Pool/GroupUtils.cpp +5 -0
- data/src/agent/Core/ApplicationPool/Pool/InitializationAndShutdown.cpp +5 -0
- data/src/agent/Core/ApplicationPool/Pool/Miscellaneous.cpp +5 -0
- data/src/agent/Core/ApplicationPool/Pool/ProcessUtils.cpp +5 -0
- data/src/agent/Core/ApplicationPool/Pool/StateInspection.cpp +11 -1
- data/src/agent/Core/ApplicationPool/Pool.h +0 -2
- data/src/agent/Core/ApplicationPool/Process.h +22 -6
- data/src/agent/Core/ApplicationPool/Session.h +6 -1
- data/src/agent/Core/Config.h +7 -3
- data/src/agent/Core/Controller/Config.h +1 -1
- data/src/agent/Core/CoreMain.cpp +10 -17
- data/src/agent/Core/SpawningKit/Handshake/Prepare.h +1 -53
- data/src/agent/Core/SpawningKit/Handshake/Session.h +3 -0
- data/src/agent/Core/SpawningKit/Handshake/WorkDir.h +5 -2
- data/src/agent/Core/SpawningKit/SmartSpawner.h +6 -2
- data/src/agent/Core/SpawningKit/Spawner.h +4 -0
- data/src/agent/Shared/Fundamentals/AbortHandler.cpp +88 -9
- data/src/agent/Shared/Fundamentals/AbortHandler.h +2 -0
- data/src/agent/Shared/Fundamentals/Initialization.cpp +9 -3
- data/src/agent/Shared/Fundamentals/Initialization.h +3 -3
- data/src/agent/SpawnEnvSetupper/SpawnEnvSetupperMain.cpp +6 -7
- data/src/agent/Watchdog/Config.h +1 -1
- data/src/agent/Watchdog/WatchdogMain.cpp +4 -7
- data/src/apache2_module/ConfigGeneral/ManifestGeneration.h +5 -3
- data/src/apache2_module/DirConfig/AutoGeneratedStruct.h +3 -0
- data/src/apache2_module/DirConfig/AutoGeneratedStruct.h.cxxcodebuilder +3 -0
- data/src/apache2_module/ServerConfig/AutoGeneratedStruct.h +2 -1
- data/src/apache2_module/ServerConfig/AutoGeneratedStruct.h.cxxcodebuilder +2 -1
- data/src/cxx_supportlib/Constants.h +1 -1
- data/src/cxx_supportlib/DataStructures/StringMap.h +0 -1
- data/src/cxx_supportlib/FileTools/PathManip.cpp +1 -1
- data/src/cxx_supportlib/SafeLibev.h +1 -3
- data/src/cxx_supportlib/ServerKit/Hooks.h +2 -2
- data/src/cxx_supportlib/ServerKit/HttpHeaderParser.h +0 -1
- data/src/cxx_supportlib/ServerKit/HttpServer.h +15 -10
- data/src/cxx_supportlib/ServerKit/Server.h +0 -6
- data/src/cxx_supportlib/Utils/AsyncSignalSafeUtils.h +2 -0
- data/src/cxx_supportlib/Utils/SpeedMeter.h +0 -3
- data/src/cxx_supportlib/oxt/implementation.cpp +11 -0
- data/src/cxx_supportlib/oxt/system_calls.cpp +10 -3
- data/src/cxx_supportlib/oxt/thread.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/as_tuple.hpp +35 -9
- data/src/cxx_supportlib/vendor-modified/boost/asio/associated_immediate_executor.hpp +3 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/associator.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/async_result.hpp +74 -68
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_datagram_socket.hpp +11 -11
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_deadline_timer.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_random_access_file.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_raw_socket.hpp +10 -10
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_readable_pipe.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_seq_packet_socket.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_serial_port.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_signal_set.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_socket.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_socket_acceptor.hpp +9 -9
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_stream_file.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_stream_socket.hpp +6 -6
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_waitable_timer.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_writable_pipe.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/bind_allocator.hpp +88 -22
- data/src/cxx_supportlib/vendor-modified/boost/asio/bind_cancellation_slot.hpp +91 -22
- data/src/cxx_supportlib/vendor-modified/boost/asio/bind_executor.hpp +105 -23
- data/src/cxx_supportlib/vendor-modified/boost/asio/bind_immediate_executor.hpp +90 -23
- data/src/cxx_supportlib/vendor-modified/boost/asio/buffer.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/buffer_registration.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/cancel_after.hpp +303 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/cancel_at.hpp +296 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/{experimental/impl/co_composed.hpp → co_composed.hpp} +208 -61
- data/src/cxx_supportlib/vendor-modified/boost/asio/completion_condition.hpp +49 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/compose.hpp +10 -201
- data/src/cxx_supportlib/vendor-modified/boost/asio/composed.hpp +415 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/connect.hpp +214 -48
- data/src/cxx_supportlib/vendor-modified/boost/asio/coroutine.hpp +3 -4
- data/src/cxx_supportlib/vendor-modified/boost/asio/default_completion_token.hpp +91 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/deferred.hpp +9 -5
- data/src/cxx_supportlib/vendor-modified/boost/asio/detached.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/buffered_stream_storage.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/{experimental/detail/channel_message.hpp → detail/completion_message.hpp} +14 -16
- data/src/cxx_supportlib/vendor-modified/boost/asio/{experimental/detail/channel_payload.hpp → detail/completion_payload.hpp} +30 -32
- data/src/cxx_supportlib/vendor-modified/boost/asio/{experimental/detail/channel_handler.hpp → detail/completion_payload_handler.hpp} +15 -13
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/config.hpp +26 -32
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/deadline_timer_service.hpp +5 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/handler_alloc_helpers.hpp +14 -118
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/descriptor_ops.ipp +36 -33
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/dev_poll_reactor.ipp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/reactive_descriptor_service.ipp +7 -5
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/reactive_socket_service_base.ipp +6 -4
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/socket_ops.ipp +44 -35
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/socket_select_interrupter.ipp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/initiation_base.hpp +64 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/memory.hpp +0 -11
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_descriptor_service.hpp +20 -16
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_send_op.hpp +0 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_service.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_service_base.hpp +23 -18
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/recycling_allocator.hpp +9 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/resolve_endpoint_op.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/resolve_query_op.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/thread_info_base.hpp +11 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/timed_cancel_op.hpp +363 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/wrapped_handler.hpp +29 -51
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/allocator.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/blocking.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/blocking_adaptation.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/context.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/mapping.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/occupancy.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/outstanding_work.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution/relationship.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/basic_channel.hpp +2 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/basic_concurrent_channel.hpp +2 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/co_composed.hpp +2 -114
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/channel_receive_op.hpp +2 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/channel_send_functions.hpp +27 -19
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/channel_send_op.hpp +0 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/channel_service.hpp +17 -15
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/coro_promise_allocator.hpp +2 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/impl/channel_service.hpp +4 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/partial_promise.hpp +3 -5
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/as_single.hpp +12 -7
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/coro.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/parallel_group.hpp +38 -40
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/promise.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/use_coro.hpp +5 -5
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/use_promise.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/immediate.hpp +144 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/append.hpp +14 -7
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/as_tuple.hpp +45 -14
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/awaitable.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/cancel_after.hpp +270 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/cancel_at.hpp +270 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/co_spawn.hpp +8 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/connect.hpp +60 -166
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/consign.hpp +14 -7
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/detached.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/prepend.hpp +14 -7
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/read.hpp +26 -177
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/read_at.hpp +16 -82
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/read_until.hpp +13 -286
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/redirect_error.hpp +55 -18
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/spawn.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/write.hpp +26 -185
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/write_at.hpp +16 -87
- data/src/cxx_supportlib/vendor-modified/boost/asio/io_context_strand.hpp +5 -5
- data/src/cxx_supportlib/vendor-modified/boost/asio/ip/basic_resolver.hpp +6 -6
- data/src/cxx_supportlib/vendor-modified/boost/asio/ip/detail/socket_option.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/address_v6.ipp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/placeholders.hpp +12 -6
- data/src/cxx_supportlib/vendor-modified/boost/asio/posix/basic_descriptor.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/posix/basic_stream_descriptor.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/read.hpp +127 -28
- data/src/cxx_supportlib/vendor-modified/boost/asio/read_at.hpp +70 -20
- data/src/cxx_supportlib/vendor-modified/boost/asio/read_until.hpp +114 -36
- data/src/cxx_supportlib/vendor-modified/boost/asio/redirect_error.hpp +43 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/registered_buffer.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/spawn.hpp +0 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/impl/openssl_init.ipp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/impl/context.ipp +10 -7
- data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/stream.hpp +5 -5
- data/src/cxx_supportlib/vendor-modified/boost/asio/this_coro.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/use_awaitable.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/use_future.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/uses_executor.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/version.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/write.hpp +147 -35
- data/src/cxx_supportlib/vendor-modified/boost/asio/write_at.hpp +74 -22
- data/src/cxx_supportlib/vendor-modified/boost/asio.hpp +6 -0
- data/src/cxx_supportlib/vendor-modified/boost/assert/source_location.hpp +4 -1
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/futex.hpp +42 -11
- data/src/cxx_supportlib/vendor-modified/boost/bind/bind.hpp +15 -37
- data/src/cxx_supportlib/vendor-modified/boost/container/adaptive_pool.hpp +8 -8
- data/src/cxx_supportlib/vendor-modified/boost/container/allocator.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/allocator_traits.hpp +151 -10
- data/src/cxx_supportlib/vendor-modified/boost/container/container_fwd.hpp +11 -9
- data/src/cxx_supportlib/vendor-modified/boost/container/deque.hpp +611 -102
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/adaptive_node_pool.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/adaptive_node_pool_impl.hpp +47 -47
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/advanced_insert_int.hpp +25 -24
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/allocation_type.hpp +7 -7
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/block_list.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/block_slist.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/construct_in_place.hpp +35 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/copy_move_algo.hpp +14 -14
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/dispatch_uses_allocator.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/flat_tree.hpp +55 -23
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/function_detector.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/is_container.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/is_contiguous_container.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/is_pair.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/iterators.hpp +8 -8
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/math_functions.hpp +9 -9
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/mpl.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/multiallocation_chain.hpp +96 -10
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/node_alloc_holder.hpp +19 -4
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/node_pool.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/pair.hpp +17 -17
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/pool_common.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/pool_common_alloc.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/pool_resource.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/tree.hpp +86 -52
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/version_type.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/workaround.hpp +12 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/devector.hpp +145 -65
- data/src/cxx_supportlib/vendor-modified/boost/container/flat_map.hpp +105 -22
- data/src/cxx_supportlib/vendor-modified/boost/container/flat_set.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/container/list.hpp +30 -22
- data/src/cxx_supportlib/vendor-modified/boost/container/map.hpp +19 -2
- data/src/cxx_supportlib/vendor-modified/boost/container/new_allocator.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/node_allocator.hpp +15 -8
- data/src/cxx_supportlib/vendor-modified/boost/container/node_handle.hpp +6 -5
- data/src/cxx_supportlib/vendor-modified/boost/container/options.hpp +15 -15
- data/src/cxx_supportlib/vendor-modified/boost/container/pmr/memory_resource.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/pmr/monotonic_buffer_resource.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/pmr/resource_adaptor.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/container/scoped_allocator.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/set.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/container/slist.hpp +31 -24
- data/src/cxx_supportlib/vendor-modified/boost/container/small_vector.hpp +45 -43
- data/src/cxx_supportlib/vendor-modified/boost/container/stable_vector.hpp +45 -33
- data/src/cxx_supportlib/vendor-modified/boost/container/static_vector.hpp +5 -7
- data/src/cxx_supportlib/vendor-modified/boost/container/string.hpp +55 -47
- data/src/cxx_supportlib/vendor-modified/boost/container/uses_allocator.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/container/vector.hpp +222 -73
- data/src/cxx_supportlib/vendor-modified/boost/core/detail/minstd_rand.hpp +58 -0
- data/src/cxx_supportlib/vendor-modified/boost/core/detail/string_view.hpp +13 -13
- data/src/cxx_supportlib/vendor-modified/boost/core/empty_value.hpp +53 -5
- data/src/cxx_supportlib/vendor-modified/boost/core/lightweight_test.hpp +1 -0
- data/src/cxx_supportlib/vendor-modified/boost/core/pointer_in_range.hpp +49 -0
- data/src/cxx_supportlib/vendor-modified/boost/core/span.hpp +2 -0
- data/src/cxx_supportlib/vendor-modified/boost/core/type_name.hpp +7 -2
- data/src/cxx_supportlib/vendor-modified/boost/function/function_base.hpp +22 -34
- data/src/cxx_supportlib/vendor-modified/boost/function/function_template.hpp +141 -38
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/algorithm.hpp +8 -8
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/hash.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/hook_traits.hpp +8 -6
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/pointer_traits.hpp +18 -18
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/converter_lexical_streams.hpp +22 -17
- data/src/cxx_supportlib/vendor-modified/boost/libs/random/src/random_device.cpp +3 -1
- data/src/cxx_supportlib/vendor-modified/boost/move/detail/config_begin.hpp +0 -1
- data/src/cxx_supportlib/vendor-modified/boost/move/detail/launder.hpp +53 -0
- data/src/cxx_supportlib/vendor-modified/boost/move/detail/type_traits.hpp +9 -1
- data/src/cxx_supportlib/vendor-modified/boost/move/detail/workaround.hpp +6 -1
- data/src/cxx_supportlib/vendor-modified/boost/mp11/version.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/integral_wrapper.hpp +2 -1
- data/src/cxx_supportlib/vendor-modified/boost/predef/version.h +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/requires_cxx11.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_has_gcc_intrinsics.hpp +4 -1
- data/src/cxx_supportlib/vendor-modified/boost/system/detail/generic_category_message.hpp +13 -1
- data/src/cxx_supportlib/vendor-modified/boost/unordered/concurrent_flat_map.hpp +13 -1
- data/src/cxx_supportlib/vendor-modified/boost/unordered/concurrent_flat_map_fwd.hpp +15 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/concurrent_flat_set.hpp +13 -1
- data/src/cxx_supportlib/vendor-modified/boost/unordered/concurrent_flat_set_fwd.hpp +15 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/fca.hpp +22 -6
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/concurrent_table.hpp +38 -10
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/core.hpp +111 -2
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/cumulative_stats.hpp +177 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/table.hpp +11 -1
- data/src/cxx_supportlib/vendor-modified/boost/unordered/hash_traits.hpp +33 -7
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_map.hpp +12 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_map_fwd.hpp +15 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_set.hpp +12 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_set_fwd.hpp +14 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_map_fwd.hpp +19 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_node_map.hpp +12 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_node_map_fwd.hpp +15 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_node_set.hpp +12 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_node_set_fwd.hpp +14 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_set_fwd.hpp +17 -0
- data/src/cxx_supportlib/vendor-modified/boost/utility/detail/minstd_rand.hpp +1 -43
- data/src/cxx_supportlib/vendor-modified/boost/version.hpp +2 -2
- data/src/ruby_supportlib/phusion_passenger/config/compile_nginx_engine_command.rb +6 -2
- data/src/ruby_supportlib/phusion_passenger/config/install_standalone_runtime_command.rb +10 -0
- data/src/ruby_supportlib/phusion_passenger/config/nginx_engine_compiler.rb +12 -4
- data/src/ruby_supportlib/phusion_passenger/platform_info/compiler.rb +32 -5
- data/src/ruby_supportlib/phusion_passenger/standalone/start_command.rb +0 -4
- data/src/ruby_supportlib/phusion_passenger/utils/json.rb +5 -1
- data/src/ruby_supportlib/phusion_passenger/utils.rb +5 -15
- data/src/ruby_supportlib/phusion_passenger.rb +5 -5
- metadata +21 -8
@@ -1603,7 +1603,7 @@ std::size_t read_until(SyncReadStream& s, DynamicBuffer_v2 buffers,
|
|
1603
1603
|
* Regardless of whether the asynchronous operation completes immediately or
|
1604
1604
|
* not, the completion handler will not be invoked from within this function.
|
1605
1605
|
* On immediate completion, invocation of the handler will be performed in a
|
1606
|
-
* manner equivalent to using boost::asio::
|
1606
|
+
* manner equivalent to using boost::asio::async_immediate().
|
1607
1607
|
*
|
1608
1608
|
* @par Completion Signature
|
1609
1609
|
* @code void(boost::system::error_code, std::size_t) @endcode
|
@@ -1656,7 +1656,7 @@ template <typename AsyncReadStream, typename DynamicBuffer_v1,
|
|
1656
1656
|
BOOST_ASIO_COMPLETION_TOKEN_FOR(void (boost::system::error_code,
|
1657
1657
|
std::size_t)) ReadToken = default_completion_token_t<
|
1658
1658
|
typename AsyncReadStream::executor_type>>
|
1659
|
-
auto async_read_until(AsyncReadStream& s,
|
1659
|
+
inline auto async_read_until(AsyncReadStream& s,
|
1660
1660
|
DynamicBuffer_v1&& buffers, char delim,
|
1661
1661
|
ReadToken&& token = default_completion_token_t<
|
1662
1662
|
typename AsyncReadStream::executor_type>(),
|
@@ -1670,7 +1670,13 @@ auto async_read_until(AsyncReadStream& s,
|
|
1670
1670
|
async_initiate<ReadToken,
|
1671
1671
|
void (boost::system::error_code, std::size_t)>(
|
1672
1672
|
declval<detail::initiate_async_read_until_delim_v1<AsyncReadStream>>(),
|
1673
|
-
token, static_cast<DynamicBuffer_v1&&>(buffers), delim))
|
1673
|
+
token, static_cast<DynamicBuffer_v1&&>(buffers), delim))
|
1674
|
+
{
|
1675
|
+
return async_initiate<ReadToken,
|
1676
|
+
void (boost::system::error_code, std::size_t)>(
|
1677
|
+
detail::initiate_async_read_until_delim_v1<AsyncReadStream>(s),
|
1678
|
+
token, static_cast<DynamicBuffer_v1&&>(buffers), delim);
|
1679
|
+
}
|
1674
1680
|
|
1675
1681
|
/// Start an asynchronous operation to read data into a dynamic buffer sequence
|
1676
1682
|
/// until it contains a specified delimiter.
|
@@ -1720,7 +1726,7 @@ auto async_read_until(AsyncReadStream& s,
|
|
1720
1726
|
* Regardless of whether the asynchronous operation completes immediately or
|
1721
1727
|
* not, the completion handler will not be invoked from within this function.
|
1722
1728
|
* On immediate completion, invocation of the handler will be performed in a
|
1723
|
-
* manner equivalent to using boost::asio::
|
1729
|
+
* manner equivalent to using boost::asio::async_immediate().
|
1724
1730
|
*
|
1725
1731
|
* @par Completion Signature
|
1726
1732
|
* @code void(boost::system::error_code, std::size_t) @endcode
|
@@ -1773,7 +1779,7 @@ template <typename AsyncReadStream, typename DynamicBuffer_v1,
|
|
1773
1779
|
BOOST_ASIO_COMPLETION_TOKEN_FOR(void (boost::system::error_code,
|
1774
1780
|
std::size_t)) ReadToken = default_completion_token_t<
|
1775
1781
|
typename AsyncReadStream::executor_type>>
|
1776
|
-
auto async_read_until(AsyncReadStream& s,
|
1782
|
+
inline auto async_read_until(AsyncReadStream& s,
|
1777
1783
|
DynamicBuffer_v1&& buffers,
|
1778
1784
|
BOOST_ASIO_STRING_VIEW_PARAM delim,
|
1779
1785
|
ReadToken&& token = default_completion_token_t<
|
@@ -1790,7 +1796,14 @@ auto async_read_until(AsyncReadStream& s,
|
|
1790
1796
|
declval<detail::initiate_async_read_until_delim_string_v1<
|
1791
1797
|
AsyncReadStream>>(),
|
1792
1798
|
token, static_cast<DynamicBuffer_v1&&>(buffers),
|
1793
|
-
static_cast<std::string>(delim)))
|
1799
|
+
static_cast<std::string>(delim)))
|
1800
|
+
{
|
1801
|
+
return async_initiate<ReadToken,
|
1802
|
+
void (boost::system::error_code, std::size_t)>(
|
1803
|
+
detail::initiate_async_read_until_delim_string_v1<AsyncReadStream>(s),
|
1804
|
+
token, static_cast<DynamicBuffer_v1&&>(buffers),
|
1805
|
+
static_cast<std::string>(delim));
|
1806
|
+
}
|
1794
1807
|
|
1795
1808
|
#if !defined(BOOST_ASIO_NO_EXTENSIONS)
|
1796
1809
|
#if defined(BOOST_ASIO_HAS_BOOST_REGEX) \
|
@@ -1848,7 +1861,7 @@ auto async_read_until(AsyncReadStream& s,
|
|
1848
1861
|
* Regardless of whether the asynchronous operation completes immediately or
|
1849
1862
|
* not, the completion handler will not be invoked from within this function.
|
1850
1863
|
* On immediate completion, invocation of the handler will be performed in a
|
1851
|
-
* manner equivalent to using boost::asio::
|
1864
|
+
* manner equivalent to using boost::asio::async_immediate().
|
1852
1865
|
*
|
1853
1866
|
* @par Completion Signature
|
1854
1867
|
* @code void(boost::system::error_code, std::size_t) @endcode
|
@@ -1902,7 +1915,7 @@ template <typename AsyncReadStream, typename DynamicBuffer_v1, typename Traits,
|
|
1902
1915
|
BOOST_ASIO_COMPLETION_TOKEN_FOR(void (boost::system::error_code,
|
1903
1916
|
std::size_t)) ReadToken = default_completion_token_t<
|
1904
1917
|
typename AsyncReadStream::executor_type>>
|
1905
|
-
auto async_read_until(AsyncReadStream& s, DynamicBuffer_v1&& buffers,
|
1918
|
+
inline auto async_read_until(AsyncReadStream& s, DynamicBuffer_v1&& buffers,
|
1906
1919
|
const boost::basic_regex<char, Traits>& expr,
|
1907
1920
|
ReadToken&& token = default_completion_token_t<
|
1908
1921
|
typename AsyncReadStream::executor_type>(),
|
@@ -1916,7 +1929,13 @@ auto async_read_until(AsyncReadStream& s, DynamicBuffer_v1&& buffers,
|
|
1916
1929
|
async_initiate<ReadToken,
|
1917
1930
|
void (boost::system::error_code, std::size_t)>(
|
1918
1931
|
declval<detail::initiate_async_read_until_expr_v1<AsyncReadStream>>(),
|
1919
|
-
token, static_cast<DynamicBuffer_v1&&>(buffers), expr))
|
1932
|
+
token, static_cast<DynamicBuffer_v1&&>(buffers), expr))
|
1933
|
+
{
|
1934
|
+
return async_initiate<ReadToken,
|
1935
|
+
void (boost::system::error_code, std::size_t)>(
|
1936
|
+
detail::initiate_async_read_until_expr_v1<AsyncReadStream>(s),
|
1937
|
+
token, static_cast<DynamicBuffer_v1&&>(buffers), expr);
|
1938
|
+
}
|
1920
1939
|
|
1921
1940
|
#endif // defined(BOOST_ASIO_HAS_BOOST_REGEX)
|
1922
1941
|
// || defined(GENERATING_DOCUMENTATION)
|
@@ -1984,7 +2003,7 @@ auto async_read_until(AsyncReadStream& s, DynamicBuffer_v1&& buffers,
|
|
1984
2003
|
* Regardless of whether the asynchronous operation completes immediately or
|
1985
2004
|
* not, the completion handler will not be invoked from within this function.
|
1986
2005
|
* On immediate completion, invocation of the handler will be performed in a
|
1987
|
-
* manner equivalent to using boost::asio::
|
2006
|
+
* manner equivalent to using boost::asio::async_immediate().
|
1988
2007
|
*
|
1989
2008
|
* @note After a successful async_read_until operation, the dynamic buffer
|
1990
2009
|
* sequence may contain additional data beyond that which matched the function
|
@@ -2070,7 +2089,7 @@ template <typename AsyncReadStream,
|
|
2070
2089
|
BOOST_ASIO_COMPLETION_TOKEN_FOR(void (boost::system::error_code,
|
2071
2090
|
std::size_t)) ReadToken = default_completion_token_t<
|
2072
2091
|
typename AsyncReadStream::executor_type>>
|
2073
|
-
auto async_read_until(AsyncReadStream& s,
|
2092
|
+
inline auto async_read_until(AsyncReadStream& s,
|
2074
2093
|
DynamicBuffer_v1&& buffers, MatchCondition match_condition,
|
2075
2094
|
ReadToken&& token = default_completion_token_t<
|
2076
2095
|
typename AsyncReadStream::executor_type>(),
|
@@ -2088,7 +2107,14 @@ auto async_read_until(AsyncReadStream& s,
|
|
2088
2107
|
void (boost::system::error_code, std::size_t)>(
|
2089
2108
|
declval<detail::initiate_async_read_until_match_v1<AsyncReadStream>>(),
|
2090
2109
|
token, static_cast<DynamicBuffer_v1&&>(buffers),
|
2091
|
-
match_condition))
|
2110
|
+
match_condition))
|
2111
|
+
{
|
2112
|
+
return async_initiate<ReadToken,
|
2113
|
+
void (boost::system::error_code, std::size_t)>(
|
2114
|
+
detail::initiate_async_read_until_match_v1<AsyncReadStream>(s),
|
2115
|
+
token, static_cast<DynamicBuffer_v1&&>(buffers),
|
2116
|
+
match_condition);
|
2117
|
+
}
|
2092
2118
|
|
2093
2119
|
#if !defined(BOOST_ASIO_NO_IOSTREAM)
|
2094
2120
|
|
@@ -2139,7 +2165,7 @@ auto async_read_until(AsyncReadStream& s,
|
|
2139
2165
|
* Regardless of whether the asynchronous operation completes immediately or
|
2140
2166
|
* not, the completion handler will not be invoked from within this function.
|
2141
2167
|
* On immediate completion, invocation of the handler will be performed in a
|
2142
|
-
* manner equivalent to using boost::asio::
|
2168
|
+
* manner equivalent to using boost::asio::async_immediate().
|
2143
2169
|
*
|
2144
2170
|
* @par Completion Signature
|
2145
2171
|
* @code void(boost::system::error_code, std::size_t) @endcode
|
@@ -2191,7 +2217,7 @@ template <typename AsyncReadStream, typename Allocator,
|
|
2191
2217
|
BOOST_ASIO_COMPLETION_TOKEN_FOR(void (boost::system::error_code,
|
2192
2218
|
std::size_t)) ReadToken = default_completion_token_t<
|
2193
2219
|
typename AsyncReadStream::executor_type>>
|
2194
|
-
auto async_read_until(AsyncReadStream& s,
|
2220
|
+
inline auto async_read_until(AsyncReadStream& s,
|
2195
2221
|
boost::asio::basic_streambuf<Allocator>& b, char delim,
|
2196
2222
|
ReadToken&& token = default_completion_token_t<
|
2197
2223
|
typename AsyncReadStream::executor_type>())
|
@@ -2199,7 +2225,13 @@ auto async_read_until(AsyncReadStream& s,
|
|
2199
2225
|
async_initiate<ReadToken,
|
2200
2226
|
void (boost::system::error_code, std::size_t)>(
|
2201
2227
|
declval<detail::initiate_async_read_until_delim_v1<AsyncReadStream>>(),
|
2202
|
-
token, basic_streambuf_ref<Allocator>(b), delim))
|
2228
|
+
token, basic_streambuf_ref<Allocator>(b), delim))
|
2229
|
+
{
|
2230
|
+
return async_initiate<ReadToken,
|
2231
|
+
void (boost::system::error_code, std::size_t)>(
|
2232
|
+
detail::initiate_async_read_until_delim_v1<AsyncReadStream>(s),
|
2233
|
+
token, basic_streambuf_ref<Allocator>(b), delim);
|
2234
|
+
}
|
2203
2235
|
|
2204
2236
|
/// Start an asynchronous operation to read data into a streambuf until it
|
2205
2237
|
/// contains a specified delimiter.
|
@@ -2248,7 +2280,7 @@ auto async_read_until(AsyncReadStream& s,
|
|
2248
2280
|
* Regardless of whether the asynchronous operation completes immediately or
|
2249
2281
|
* not, the completion handler will not be invoked from within this function.
|
2250
2282
|
* On immediate completion, invocation of the handler will be performed in a
|
2251
|
-
* manner equivalent to using boost::asio::
|
2283
|
+
* manner equivalent to using boost::asio::async_immediate().
|
2252
2284
|
*
|
2253
2285
|
* @par Completion Signature
|
2254
2286
|
* @code void(boost::system::error_code, std::size_t) @endcode
|
@@ -2300,7 +2332,7 @@ template <typename AsyncReadStream, typename Allocator,
|
|
2300
2332
|
BOOST_ASIO_COMPLETION_TOKEN_FOR(void (boost::system::error_code,
|
2301
2333
|
std::size_t)) ReadToken = default_completion_token_t<
|
2302
2334
|
typename AsyncReadStream::executor_type>>
|
2303
|
-
auto async_read_until(AsyncReadStream& s,
|
2335
|
+
inline auto async_read_until(AsyncReadStream& s,
|
2304
2336
|
boost::asio::basic_streambuf<Allocator>& b,
|
2305
2337
|
BOOST_ASIO_STRING_VIEW_PARAM delim,
|
2306
2338
|
ReadToken&& token = default_completion_token_t<
|
@@ -2311,7 +2343,14 @@ auto async_read_until(AsyncReadStream& s,
|
|
2311
2343
|
declval<detail::initiate_async_read_until_delim_string_v1<
|
2312
2344
|
AsyncReadStream>>(),
|
2313
2345
|
token, basic_streambuf_ref<Allocator>(b),
|
2314
|
-
static_cast<std::string>(delim)))
|
2346
|
+
static_cast<std::string>(delim)))
|
2347
|
+
{
|
2348
|
+
return async_initiate<ReadToken,
|
2349
|
+
void (boost::system::error_code, std::size_t)>(
|
2350
|
+
detail::initiate_async_read_until_delim_string_v1<AsyncReadStream>(s),
|
2351
|
+
token, basic_streambuf_ref<Allocator>(b),
|
2352
|
+
static_cast<std::string>(delim));
|
2353
|
+
}
|
2315
2354
|
|
2316
2355
|
#if defined(BOOST_ASIO_HAS_BOOST_REGEX) \
|
2317
2356
|
|| defined(GENERATING_DOCUMENTATION)
|
@@ -2365,7 +2404,7 @@ auto async_read_until(AsyncReadStream& s,
|
|
2365
2404
|
* Regardless of whether the asynchronous operation completes immediately or
|
2366
2405
|
* not, the completion handler will not be invoked from within this function.
|
2367
2406
|
* On immediate completion, invocation of the handler will be performed in a
|
2368
|
-
* manner equivalent to using boost::asio::
|
2407
|
+
* manner equivalent to using boost::asio::async_immediate().
|
2369
2408
|
*
|
2370
2409
|
* @par Completion Signature
|
2371
2410
|
* @code void(boost::system::error_code, std::size_t) @endcode
|
@@ -2418,7 +2457,7 @@ template <typename AsyncReadStream, typename Allocator, typename Traits,
|
|
2418
2457
|
BOOST_ASIO_COMPLETION_TOKEN_FOR(void (boost::system::error_code,
|
2419
2458
|
std::size_t)) ReadToken = default_completion_token_t<
|
2420
2459
|
typename AsyncReadStream::executor_type>>
|
2421
|
-
auto async_read_until(AsyncReadStream& s,
|
2460
|
+
inline auto async_read_until(AsyncReadStream& s,
|
2422
2461
|
boost::asio::basic_streambuf<Allocator>& b,
|
2423
2462
|
const boost::basic_regex<char, Traits>& expr,
|
2424
2463
|
ReadToken&& token = default_completion_token_t<
|
@@ -2427,7 +2466,13 @@ auto async_read_until(AsyncReadStream& s,
|
|
2427
2466
|
async_initiate<ReadToken,
|
2428
2467
|
void (boost::system::error_code, std::size_t)>(
|
2429
2468
|
declval<detail::initiate_async_read_until_expr_v1<AsyncReadStream>>(),
|
2430
|
-
token, basic_streambuf_ref<Allocator>(b), expr))
|
2469
|
+
token, basic_streambuf_ref<Allocator>(b), expr))
|
2470
|
+
{
|
2471
|
+
return async_initiate<ReadToken,
|
2472
|
+
void (boost::system::error_code, std::size_t)>(
|
2473
|
+
detail::initiate_async_read_until_expr_v1<AsyncReadStream>(s),
|
2474
|
+
token, basic_streambuf_ref<Allocator>(b), expr);
|
2475
|
+
}
|
2431
2476
|
|
2432
2477
|
#endif // defined(BOOST_ASIO_HAS_BOOST_REGEX)
|
2433
2478
|
// || defined(GENERATING_DOCUMENTATION)
|
@@ -2492,7 +2537,7 @@ auto async_read_until(AsyncReadStream& s,
|
|
2492
2537
|
* Regardless of whether the asynchronous operation completes immediately or
|
2493
2538
|
* not, the completion handler will not be invoked from within this function.
|
2494
2539
|
* On immediate completion, invocation of the handler will be performed in a
|
2495
|
-
* manner equivalent to using boost::asio::
|
2540
|
+
* manner equivalent to using boost::asio::async_immediate().
|
2496
2541
|
*
|
2497
2542
|
* @note After a successful async_read_until operation, the streambuf may
|
2498
2543
|
* contain additional data beyond that which matched the function object. An
|
@@ -2576,7 +2621,7 @@ template <typename AsyncReadStream, typename Allocator, typename MatchCondition,
|
|
2576
2621
|
BOOST_ASIO_COMPLETION_TOKEN_FOR(void (boost::system::error_code,
|
2577
2622
|
std::size_t)) ReadToken = default_completion_token_t<
|
2578
2623
|
typename AsyncReadStream::executor_type>>
|
2579
|
-
auto async_read_until(AsyncReadStream& s,
|
2624
|
+
inline auto async_read_until(AsyncReadStream& s,
|
2580
2625
|
boost::asio::basic_streambuf<Allocator>& b, MatchCondition match_condition,
|
2581
2626
|
ReadToken&& token = default_completion_token_t<
|
2582
2627
|
typename AsyncReadStream::executor_type>(),
|
@@ -2585,7 +2630,13 @@ auto async_read_until(AsyncReadStream& s,
|
|
2585
2630
|
async_initiate<ReadToken,
|
2586
2631
|
void (boost::system::error_code, std::size_t)>(
|
2587
2632
|
declval<detail::initiate_async_read_until_match_v1<AsyncReadStream>>(),
|
2588
|
-
token, basic_streambuf_ref<Allocator>(b), match_condition))
|
2633
|
+
token, basic_streambuf_ref<Allocator>(b), match_condition))
|
2634
|
+
{
|
2635
|
+
return async_initiate<ReadToken,
|
2636
|
+
void (boost::system::error_code, std::size_t)>(
|
2637
|
+
detail::initiate_async_read_until_match_v1<AsyncReadStream>(s),
|
2638
|
+
token, basic_streambuf_ref<Allocator>(b), match_condition);
|
2639
|
+
}
|
2589
2640
|
|
2590
2641
|
#endif // !defined(BOOST_ASIO_NO_IOSTREAM)
|
2591
2642
|
#endif // !defined(BOOST_ASIO_NO_EXTENSIONS)
|
@@ -2640,7 +2691,7 @@ auto async_read_until(AsyncReadStream& s,
|
|
2640
2691
|
* Regardless of whether the asynchronous operation completes immediately or
|
2641
2692
|
* not, the completion handler will not be invoked from within this function.
|
2642
2693
|
* On immediate completion, invocation of the handler will be performed in a
|
2643
|
-
* manner equivalent to using boost::asio::
|
2694
|
+
* manner equivalent to using boost::asio::async_immediate().
|
2644
2695
|
*
|
2645
2696
|
* @par Completion Signature
|
2646
2697
|
* @code void(boost::system::error_code, std::size_t) @endcode
|
@@ -2693,7 +2744,8 @@ template <typename AsyncReadStream, typename DynamicBuffer_v2,
|
|
2693
2744
|
BOOST_ASIO_COMPLETION_TOKEN_FOR(void (boost::system::error_code,
|
2694
2745
|
std::size_t)) ReadToken = default_completion_token_t<
|
2695
2746
|
typename AsyncReadStream::executor_type>>
|
2696
|
-
auto async_read_until(AsyncReadStream& s,
|
2747
|
+
inline auto async_read_until(AsyncReadStream& s,
|
2748
|
+
DynamicBuffer_v2 buffers, char delim,
|
2697
2749
|
ReadToken&& token = default_completion_token_t<
|
2698
2750
|
typename AsyncReadStream::executor_type>(),
|
2699
2751
|
constraint_t<
|
@@ -2703,7 +2755,13 @@ auto async_read_until(AsyncReadStream& s, DynamicBuffer_v2 buffers, char delim,
|
|
2703
2755
|
async_initiate<ReadToken,
|
2704
2756
|
void (boost::system::error_code, std::size_t)>(
|
2705
2757
|
declval<detail::initiate_async_read_until_delim_v2<AsyncReadStream>>(),
|
2706
|
-
token, static_cast<DynamicBuffer_v2&&>(buffers), delim))
|
2758
|
+
token, static_cast<DynamicBuffer_v2&&>(buffers), delim))
|
2759
|
+
{
|
2760
|
+
return async_initiate<ReadToken,
|
2761
|
+
void (boost::system::error_code, std::size_t)>(
|
2762
|
+
detail::initiate_async_read_until_delim_v2<AsyncReadStream>(s),
|
2763
|
+
token, static_cast<DynamicBuffer_v2&&>(buffers), delim);
|
2764
|
+
}
|
2707
2765
|
|
2708
2766
|
/// Start an asynchronous operation to read data into a dynamic buffer sequence
|
2709
2767
|
/// until it contains a specified delimiter.
|
@@ -2753,7 +2811,7 @@ auto async_read_until(AsyncReadStream& s, DynamicBuffer_v2 buffers, char delim,
|
|
2753
2811
|
* Regardless of whether the asynchronous operation completes immediately or
|
2754
2812
|
* not, the completion handler will not be invoked from within this function.
|
2755
2813
|
* On immediate completion, invocation of the handler will be performed in a
|
2756
|
-
* manner equivalent to using boost::asio::
|
2814
|
+
* manner equivalent to using boost::asio::async_immediate().
|
2757
2815
|
*
|
2758
2816
|
* @par Completion Signature
|
2759
2817
|
* @code void(boost::system::error_code, std::size_t) @endcode
|
@@ -2806,7 +2864,7 @@ template <typename AsyncReadStream, typename DynamicBuffer_v2,
|
|
2806
2864
|
BOOST_ASIO_COMPLETION_TOKEN_FOR(void (boost::system::error_code,
|
2807
2865
|
std::size_t)) ReadToken = default_completion_token_t<
|
2808
2866
|
typename AsyncReadStream::executor_type>>
|
2809
|
-
auto async_read_until(AsyncReadStream& s, DynamicBuffer_v2 buffers,
|
2867
|
+
inline auto async_read_until(AsyncReadStream& s, DynamicBuffer_v2 buffers,
|
2810
2868
|
BOOST_ASIO_STRING_VIEW_PARAM delim,
|
2811
2869
|
ReadToken&& token = default_completion_token_t<
|
2812
2870
|
typename AsyncReadStream::executor_type>(),
|
@@ -2819,7 +2877,14 @@ auto async_read_until(AsyncReadStream& s, DynamicBuffer_v2 buffers,
|
|
2819
2877
|
declval<detail::initiate_async_read_until_delim_string_v2<
|
2820
2878
|
AsyncReadStream>>(),
|
2821
2879
|
token, static_cast<DynamicBuffer_v2&&>(buffers),
|
2822
|
-
static_cast<std::string>(delim)))
|
2880
|
+
static_cast<std::string>(delim)))
|
2881
|
+
{
|
2882
|
+
return async_initiate<ReadToken,
|
2883
|
+
void (boost::system::error_code, std::size_t)>(
|
2884
|
+
detail::initiate_async_read_until_delim_string_v2<AsyncReadStream>(s),
|
2885
|
+
token, static_cast<DynamicBuffer_v2&&>(buffers),
|
2886
|
+
static_cast<std::string>(delim));
|
2887
|
+
}
|
2823
2888
|
|
2824
2889
|
#if !defined(BOOST_ASIO_NO_EXTENSIONS)
|
2825
2890
|
#if defined(BOOST_ASIO_HAS_BOOST_REGEX) \
|
@@ -2877,7 +2942,7 @@ auto async_read_until(AsyncReadStream& s, DynamicBuffer_v2 buffers,
|
|
2877
2942
|
* Regardless of whether the asynchronous operation completes immediately or
|
2878
2943
|
* not, the completion handler will not be invoked from within this function.
|
2879
2944
|
* On immediate completion, invocation of the handler will be performed in a
|
2880
|
-
* manner equivalent to using boost::asio::
|
2945
|
+
* manner equivalent to using boost::asio::async_immediate().
|
2881
2946
|
*
|
2882
2947
|
* @par Completion Signature
|
2883
2948
|
* @code void(boost::system::error_code, std::size_t) @endcode
|
@@ -2931,7 +2996,7 @@ template <typename AsyncReadStream, typename DynamicBuffer_v2, typename Traits,
|
|
2931
2996
|
BOOST_ASIO_COMPLETION_TOKEN_FOR(void (boost::system::error_code,
|
2932
2997
|
std::size_t)) ReadToken = default_completion_token_t<
|
2933
2998
|
typename AsyncReadStream::executor_type>>
|
2934
|
-
auto async_read_until(AsyncReadStream& s, DynamicBuffer_v2 buffers,
|
2999
|
+
inline auto async_read_until(AsyncReadStream& s, DynamicBuffer_v2 buffers,
|
2935
3000
|
const boost::basic_regex<char, Traits>& expr,
|
2936
3001
|
ReadToken&& token = default_completion_token_t<
|
2937
3002
|
typename AsyncReadStream::executor_type>(),
|
@@ -2942,7 +3007,13 @@ auto async_read_until(AsyncReadStream& s, DynamicBuffer_v2 buffers,
|
|
2942
3007
|
async_initiate<ReadToken,
|
2943
3008
|
void (boost::system::error_code, std::size_t)>(
|
2944
3009
|
declval<detail::initiate_async_read_until_expr_v2<AsyncReadStream>>(),
|
2945
|
-
token, static_cast<DynamicBuffer_v2&&>(buffers), expr))
|
3010
|
+
token, static_cast<DynamicBuffer_v2&&>(buffers), expr))
|
3011
|
+
{
|
3012
|
+
return async_initiate<ReadToken,
|
3013
|
+
void (boost::system::error_code, std::size_t)>(
|
3014
|
+
detail::initiate_async_read_until_expr_v2<AsyncReadStream>(s),
|
3015
|
+
token, static_cast<DynamicBuffer_v2&&>(buffers), expr);
|
3016
|
+
}
|
2946
3017
|
|
2947
3018
|
#endif // defined(BOOST_ASIO_HAS_BOOST_REGEX)
|
2948
3019
|
// || defined(GENERATING_DOCUMENTATION)
|
@@ -3010,7 +3081,7 @@ auto async_read_until(AsyncReadStream& s, DynamicBuffer_v2 buffers,
|
|
3010
3081
|
* Regardless of whether the asynchronous operation completes immediately or
|
3011
3082
|
* not, the completion handler will not be invoked from within this function.
|
3012
3083
|
* On immediate completion, invocation of the handler will be performed in a
|
3013
|
-
* manner equivalent to using boost::asio::
|
3084
|
+
* manner equivalent to using boost::asio::async_immediate().
|
3014
3085
|
*
|
3015
3086
|
* @note After a successful async_read_until operation, the dynamic buffer
|
3016
3087
|
* sequence may contain additional data beyond that which matched the function
|
@@ -3096,7 +3167,7 @@ template <typename AsyncReadStream,
|
|
3096
3167
|
BOOST_ASIO_COMPLETION_TOKEN_FOR(void (boost::system::error_code,
|
3097
3168
|
std::size_t)) ReadToken = default_completion_token_t<
|
3098
3169
|
typename AsyncReadStream::executor_type>>
|
3099
|
-
auto async_read_until(AsyncReadStream& s,
|
3170
|
+
inline auto async_read_until(AsyncReadStream& s,
|
3100
3171
|
DynamicBuffer_v2 buffers, MatchCondition match_condition,
|
3101
3172
|
ReadToken&& token = default_completion_token_t<
|
3102
3173
|
typename AsyncReadStream::executor_type>(),
|
@@ -3110,7 +3181,14 @@ auto async_read_until(AsyncReadStream& s,
|
|
3110
3181
|
async_initiate<ReadToken,
|
3111
3182
|
void (boost::system::error_code, std::size_t)>(
|
3112
3183
|
declval<detail::initiate_async_read_until_match_v2<AsyncReadStream>>(),
|
3113
|
-
token, static_cast<DynamicBuffer_v2&&>(buffers), match_condition))
|
3184
|
+
token, static_cast<DynamicBuffer_v2&&>(buffers), match_condition))
|
3185
|
+
{
|
3186
|
+
return async_initiate<ReadToken,
|
3187
|
+
void (boost::system::error_code, std::size_t)>(
|
3188
|
+
detail::initiate_async_read_until_match_v2<AsyncReadStream>(s),
|
3189
|
+
token, static_cast<DynamicBuffer_v2&&>(buffers),
|
3190
|
+
match_condition);
|
3191
|
+
}
|
3114
3192
|
|
3115
3193
|
#endif // !defined(BOOST_ASIO_NO_EXTENSIONS)
|
3116
3194
|
|
@@ -34,7 +34,7 @@ template <typename CompletionToken>
|
|
34
34
|
class redirect_error_t
|
35
35
|
{
|
36
36
|
public:
|
37
|
-
/// Constructor.
|
37
|
+
/// Constructor.
|
38
38
|
template <typename T>
|
39
39
|
redirect_error_t(T&& completion_token, boost::system::error_code& ec)
|
40
40
|
: token_(static_cast<T&&>(completion_token)),
|
@@ -47,10 +47,50 @@ public:
|
|
47
47
|
boost::system::error_code& ec_;
|
48
48
|
};
|
49
49
|
|
50
|
+
/// A function object type that adapts a @ref completion_token to capture
|
51
|
+
/// error_code values to a variable.
|
52
|
+
/**
|
53
|
+
* May also be used directly as a completion token, in which case it adapts the
|
54
|
+
* asynchronous operation's default completion token (or boost::asio::deferred
|
55
|
+
* if no default is available).
|
56
|
+
*/
|
57
|
+
class partial_redirect_error
|
58
|
+
{
|
59
|
+
public:
|
60
|
+
/// Constructor that specifies the variable used to capture error_code values.
|
61
|
+
explicit partial_redirect_error(boost::system::error_code& ec)
|
62
|
+
: ec_(ec)
|
63
|
+
{
|
64
|
+
}
|
65
|
+
|
66
|
+
/// Adapt a @ref completion_token to specify that the completion handler
|
67
|
+
/// should capture error_code values to a variable.
|
68
|
+
template <typename CompletionToken>
|
69
|
+
BOOST_ASIO_NODISCARD inline
|
70
|
+
constexpr redirect_error_t<decay_t<CompletionToken>>
|
71
|
+
operator()(CompletionToken&& completion_token) const
|
72
|
+
{
|
73
|
+
return redirect_error_t<decay_t<CompletionToken>>(
|
74
|
+
static_cast<CompletionToken&&>(completion_token), ec_);
|
75
|
+
}
|
76
|
+
|
77
|
+
//private:
|
78
|
+
boost::system::error_code& ec_;
|
79
|
+
};
|
80
|
+
|
81
|
+
/// Create a partial completion token adapter that captures error_code values
|
82
|
+
/// to a variable.
|
83
|
+
BOOST_ASIO_NODISCARD inline partial_redirect_error
|
84
|
+
redirect_error(boost::system::error_code& ec)
|
85
|
+
{
|
86
|
+
return partial_redirect_error(ec);
|
87
|
+
}
|
88
|
+
|
50
89
|
/// Adapt a @ref completion_token to capture error_code values to a variable.
|
51
90
|
template <typename CompletionToken>
|
52
|
-
inline redirect_error_t<decay_t<CompletionToken>>
|
53
|
-
|
91
|
+
BOOST_ASIO_NODISCARD inline redirect_error_t<decay_t<CompletionToken>>
|
92
|
+
redirect_error(CompletionToken&& completion_token,
|
93
|
+
boost::system::error_code& ec)
|
54
94
|
{
|
55
95
|
return redirect_error_t<decay_t<CompletionToken>>(
|
56
96
|
static_cast<CompletionToken&&>(completion_token), ec);
|
@@ -79,7 +79,7 @@ private:
|
|
79
79
|
};
|
80
80
|
|
81
81
|
/// Holds a registered buffer over modifiable data.
|
82
|
-
/**
|
82
|
+
/**
|
83
83
|
* Satisfies the @c MutableBufferSequence type requirements.
|
84
84
|
*/
|
85
85
|
class mutable_registered_buffer
|
@@ -150,7 +150,7 @@ private:
|
|
150
150
|
};
|
151
151
|
|
152
152
|
/// Holds a registered buffer over non-modifiable data.
|
153
|
-
/**
|
153
|
+
/**
|
154
154
|
* Satisfies the @c ConstBufferSequence type requirements.
|
155
155
|
*/
|
156
156
|
class const_registered_buffer
|
@@ -38,7 +38,7 @@ public:
|
|
38
38
|
{
|
39
39
|
#if (OPENSSL_VERSION_NUMBER < 0x10100000L)
|
40
40
|
::SSL_library_init();
|
41
|
-
::SSL_load_error_strings();
|
41
|
+
::SSL_load_error_strings();
|
42
42
|
::OpenSSL_add_all_algorithms();
|
43
43
|
|
44
44
|
mutexes_.resize(::CRYPTO_num_locks());
|
@@ -124,7 +124,7 @@ private:
|
|
124
124
|
#endif // (OPENSSL_VERSION_NUMBER < 0x10000000L)
|
125
125
|
|
126
126
|
#if (OPENSSL_VERSION_NUMBER < 0x10100000L)
|
127
|
-
static void openssl_locking_func(int mode, int n,
|
127
|
+
static void openssl_locking_func(int mode, int n,
|
128
128
|
const char* /*file*/, int /*line*/)
|
129
129
|
{
|
130
130
|
if (mode & CRYPTO_LOCK)
|
@@ -270,8 +270,9 @@ context::context(context::method m)
|
|
270
270
|
#endif // defined(SSL_TXT_TLSV1_2)
|
271
271
|
|
272
272
|
// TLS v1.3.
|
273
|
-
#if (OPENSSL_VERSION_NUMBER >= 0x10101000L) \
|
274
|
-
|
273
|
+
#if ((OPENSSL_VERSION_NUMBER >= 0x10101000L) \
|
274
|
+
&& !defined(LIBRESSL_VERSION_NUMBER)) \
|
275
|
+
|| defined(BOOST_ASIO_USE_WOLFSSL)
|
275
276
|
case context::tlsv13:
|
276
277
|
handle_ = ::SSL_CTX_new(::TLS_method());
|
277
278
|
if (handle_)
|
@@ -296,16 +297,18 @@ context::context(context::method m)
|
|
296
297
|
SSL_CTX_set_max_proto_version(handle_, TLS1_3_VERSION);
|
297
298
|
}
|
298
299
|
break;
|
299
|
-
#else // (OPENSSL_VERSION_NUMBER >= 0x10101000L)
|
300
|
-
//
|
300
|
+
#else // ((OPENSSL_VERSION_NUMBER >= 0x10101000L)
|
301
|
+
// && !defined(LIBRESSL_VERSION_NUMBER))
|
302
|
+
// || defined(BOOST_ASIO_USE_WOLFSSL)
|
301
303
|
case context::tlsv13:
|
302
304
|
case context::tlsv13_client:
|
303
305
|
case context::tlsv13_server:
|
304
306
|
boost::asio::detail::throw_error(
|
305
307
|
boost::asio::error::invalid_argument, "context");
|
306
308
|
break;
|
307
|
-
#endif // (OPENSSL_VERSION_NUMBER >= 0x10101000L)
|
308
|
-
//
|
309
|
+
#endif // ((OPENSSL_VERSION_NUMBER >= 0x10101000L)
|
310
|
+
// && !defined(LIBRESSL_VERSION_NUMBER))
|
311
|
+
// || defined(BOOST_ASIO_USE_WOLFSSL)
|
309
312
|
|
310
313
|
// Any supported SSL/TLS version.
|
311
314
|
case context::sslv23:
|
@@ -795,7 +798,7 @@ BOOST_ASIO_SYNC_OP_VOID context::use_certificate_chain(
|
|
795
798
|
BOOST_ASIO_SYNC_OP_VOID_RETURN(ec);
|
796
799
|
}
|
797
800
|
}
|
798
|
-
|
801
|
+
|
799
802
|
result = ::ERR_peek_last_error();
|
800
803
|
if ((ERR_GET_LIB(result) == ERR_LIB_PEM)
|
801
804
|
&& (ERR_GET_REASON(result) == PEM_R_NO_START_LINE))
|
@@ -482,7 +482,7 @@ public:
|
|
482
482
|
* Regardless of whether the asynchronous operation completes immediately or
|
483
483
|
* not, the completion handler will not be invoked from within this function.
|
484
484
|
* On immediate completion, invocation of the handler will be performed in a
|
485
|
-
* manner equivalent to using boost::asio::
|
485
|
+
* manner equivalent to using boost::asio::async_immediate().
|
486
486
|
*
|
487
487
|
* @par Completion Signature
|
488
488
|
* @code void(boost::system::error_code) @endcode
|
@@ -539,7 +539,7 @@ public:
|
|
539
539
|
* Regardless of whether the asynchronous operation completes immediately or
|
540
540
|
* not, the completion handler will not be invoked from within this function.
|
541
541
|
* On immediate completion, invocation of the handler will be performed in a
|
542
|
-
* manner equivalent to using boost::asio::
|
542
|
+
* manner equivalent to using boost::asio::async_immediate().
|
543
543
|
*
|
544
544
|
* @par Completion Signature
|
545
545
|
* @code void(boost::system::error_code, std::size_t) @endcode
|
@@ -619,7 +619,7 @@ public:
|
|
619
619
|
* Regardless of whether the asynchronous operation completes immediately or
|
620
620
|
* not, the completion handler will not be invoked from within this function.
|
621
621
|
* On immediate completion, invocation of the handler will be performed in a
|
622
|
-
* manner equivalent to using boost::asio::
|
622
|
+
* manner equivalent to using boost::asio::async_immediate().
|
623
623
|
*
|
624
624
|
* @par Completion Signature
|
625
625
|
* @code void(boost::system::error_code) @endcode
|
@@ -723,7 +723,7 @@ public:
|
|
723
723
|
* Regardless of whether the asynchronous operation completes immediately or
|
724
724
|
* not, the completion handler will not be invoked from within this function.
|
725
725
|
* On immediate completion, invocation of the handler will be performed in a
|
726
|
-
* manner equivalent to using boost::asio::
|
726
|
+
* manner equivalent to using boost::asio::async_immediate().
|
727
727
|
*
|
728
728
|
* @par Completion Signature
|
729
729
|
* @code void(boost::system::error_code, std::size_t) @endcode
|
@@ -831,7 +831,7 @@ public:
|
|
831
831
|
* Regardless of whether the asynchronous operation completes immediately or
|
832
832
|
* not, the completion handler will not be invoked from within this function.
|
833
833
|
* On immediate completion, invocation of the handler will be performed in a
|
834
|
-
* manner equivalent to using boost::asio::
|
834
|
+
* manner equivalent to using boost::asio::async_immediate().
|
835
835
|
*
|
836
836
|
* @par Completion Signature
|
837
837
|
* @code void(boost::system::error_code, std::size_t) @endcode
|
@@ -33,7 +33,7 @@ struct executor_t
|
|
33
33
|
};
|
34
34
|
|
35
35
|
/// Awaitable object that returns the executor of the current coroutine.
|
36
|
-
constexpr executor_t executor;
|
36
|
+
BOOST_ASIO_INLINE_VARIABLE constexpr executor_t executor;
|
37
37
|
|
38
38
|
/// Awaitable type that returns the cancellation state of the current coroutine.
|
39
39
|
struct cancellation_state_t
|
@@ -58,7 +58,7 @@ struct cancellation_state_t
|
|
58
58
|
* // ...
|
59
59
|
* } @endcode
|
60
60
|
*/
|
61
|
-
constexpr cancellation_state_t cancellation_state;
|
61
|
+
BOOST_ASIO_INLINE_VARIABLE constexpr cancellation_state_t cancellation_state;
|
62
62
|
|
63
63
|
#if defined(GENERATING_DOCUMENTATION)
|
64
64
|
|
@@ -146,9 +146,9 @@ struct use_awaitable_t
|
|
146
146
|
* See the documentation for boost::asio::use_awaitable_t for a usage example.
|
147
147
|
*/
|
148
148
|
#if defined(GENERATING_DOCUMENTATION)
|
149
|
-
constexpr use_awaitable_t<> use_awaitable;
|
149
|
+
BOOST_ASIO_INLINE_VARIABLE constexpr use_awaitable_t<> use_awaitable;
|
150
150
|
#else
|
151
|
-
constexpr use_awaitable_t<> use_awaitable(0, 0, 0);
|
151
|
+
BOOST_ASIO_INLINE_VARIABLE constexpr use_awaitable_t<> use_awaitable(0, 0, 0);
|
152
152
|
#endif
|
153
153
|
|
154
154
|
} // namespace asio
|
@@ -146,7 +146,7 @@ private:
|
|
146
146
|
/**
|
147
147
|
* See the documentation for boost::asio::use_future_t for a usage example.
|
148
148
|
*/
|
149
|
-
constexpr use_future_t<> use_future;
|
149
|
+
BOOST_ASIO_INLINE_VARIABLE constexpr use_future_t<> use_future;
|
150
150
|
|
151
151
|
} // namespace asio
|
152
152
|
} // namespace boost
|
@@ -46,7 +46,7 @@ struct executor_arg_t
|
|
46
46
|
* See boost::asio::executor_arg_t and boost::asio::uses_executor
|
47
47
|
* for more information.
|
48
48
|
*/
|
49
|
-
constexpr executor_arg_t executor_arg;
|
49
|
+
BOOST_ASIO_INLINE_VARIABLE constexpr executor_arg_t executor_arg;
|
50
50
|
|
51
51
|
/// The uses_executor trait detects whether a type T has an associated executor
|
52
52
|
/// that is convertible from type Executor.
|
@@ -18,6 +18,6 @@
|
|
18
18
|
// BOOST_ASIO_VERSION % 100 is the sub-minor version
|
19
19
|
// BOOST_ASIO_VERSION / 100 % 1000 is the minor version
|
20
20
|
// BOOST_ASIO_VERSION / 100000 is the major version
|
21
|
-
#define BOOST_ASIO_VERSION
|
21
|
+
#define BOOST_ASIO_VERSION 103200 // 1.32.0
|
22
22
|
|
23
23
|
#endif // BOOST_ASIO_VERSION_HPP
|