├── .gitignore ├── .gitmodules ├── CMakeLists.txt ├── Examples ├── Base │ ├── CMakeLists.txt │ ├── Main.cpp │ ├── Test.h │ ├── Test.json │ ├── TestConfig.h │ ├── TestConfig.json │ ├── TestLog.h │ └── TestLog.json └── WebServer │ ├── CMakeLists.txt │ ├── TestServlet.cpp │ ├── TestServlet.h │ ├── TestServlet.json │ └── main.cpp ├── Include └── Magic │ ├── Core │ ├── Adapter.hpp │ ├── Any.hpp │ ├── Container.hpp │ ├── Core.hpp │ ├── Except.hpp │ ├── Stream.hpp │ ├── StringView.hpp │ └── SystemUtils.hpp │ ├── DataBase │ ├── ConnectionPool.hpp │ └── MySql.hpp │ ├── Magic │ ├── NetWork │ ├── Http │ │ ├── Http.hpp │ │ ├── HttpClient.hpp │ │ ├── HttpParser.hpp │ │ ├── HttpServer.hpp │ │ ├── HttpServlet.hpp │ │ ├── HttpSocket.hpp │ │ ├── MultiPart.hpp │ │ ├── Uri.hpp │ │ ├── Utils │ │ │ ├── MultiPartParser.hpp │ │ │ ├── http11_common.hpp │ │ │ ├── http11_parser.hpp │ │ │ └── httpclient_parser.hpp │ │ └── WebSocket.hpp │ ├── IoPool.hpp │ ├── Socket.hpp │ ├── TcpClient.hpp │ └── TcpServer.hpp │ └── Utilty │ ├── Compress.hpp │ ├── Config.hpp │ ├── Crypto.hpp │ ├── Logger.hpp │ ├── String.hpp │ ├── Thread.hpp │ ├── Timer.hpp │ ├── TimingWheel.hpp │ └── Trace.hpp ├── LICENSE ├── Magic.cmake ├── Modules ├── Magic.json └── WebServer.json ├── README.md ├── Source └── Magic │ ├── Adapter │ ├── Linux │ │ └── Utils.cpp │ └── Win │ │ └── Utils.cpp │ ├── Core │ ├── Except.cpp │ └── Stream.cpp │ ├── DataBase │ └── MySql.cpp │ ├── Magic.cpp │ ├── NetWork │ ├── Http │ │ ├── Http.cpp │ │ ├── HttpClient.cpp │ │ ├── HttpParser.cpp │ │ ├── HttpServer.cpp │ │ ├── HttpServlet.cpp │ │ ├── HttpSocket.cpp │ │ ├── MultiPart.cpp │ │ ├── Utils │ │ │ ├── MultiPartParser.cpp │ │ │ ├── http11_parser.rl │ │ │ ├── http11_parser.rl.cpp │ │ │ ├── httpclient_parser.rl │ │ │ ├── httpclient_parser.rl.cpp │ │ │ ├── uri_parser.rl │ │ │ └── uri_parser.rl.cpp │ │ └── WebSocket.cpp │ ├── IoPool.cpp │ ├── Socket.cpp │ ├── TcpClient.cpp │ └── TcpServer.cpp │ └── Utilty │ ├── Compress.cpp │ ├── Config.cpp │ ├── Crypto.cpp │ ├── Logger.cpp │ ├── Thread.cpp │ ├── Timer.cpp │ ├── TimingWheel.cpp │ └── Trace.cpp ├── Tests ├── CMakeLists.txt ├── HttpClient.cpp ├── UnitCompress.cpp ├── UnitCrypto.cpp ├── UnitStream.cpp ├── UnitString.cpp ├── UnitTrace.cpp ├── WebServer.cpp └── main.cpp ├── ThirdParty ├── Asio │ ├── COPYING │ ├── INSTALL │ ├── Include │ │ ├── Makefile.am │ │ ├── Makefile.in │ │ ├── asio.hpp │ │ └── asio │ │ │ ├── any_completion_executor.hpp │ │ │ ├── any_completion_handler.hpp │ │ │ ├── any_io_executor.hpp │ │ │ ├── append.hpp │ │ │ ├── as_tuple.hpp │ │ │ ├── associated_allocator.hpp │ │ │ ├── associated_cancellation_slot.hpp │ │ │ ├── associated_executor.hpp │ │ │ ├── associated_immediate_executor.hpp │ │ │ ├── associator.hpp │ │ │ ├── async_result.hpp │ │ │ ├── awaitable.hpp │ │ │ ├── basic_datagram_socket.hpp │ │ │ ├── basic_deadline_timer.hpp │ │ │ ├── basic_file.hpp │ │ │ ├── basic_io_object.hpp │ │ │ ├── basic_random_access_file.hpp │ │ │ ├── basic_raw_socket.hpp │ │ │ ├── basic_readable_pipe.hpp │ │ │ ├── basic_seq_packet_socket.hpp │ │ │ ├── basic_serial_port.hpp │ │ │ ├── basic_signal_set.hpp │ │ │ ├── basic_socket.hpp │ │ │ ├── basic_socket_acceptor.hpp │ │ │ ├── basic_socket_iostream.hpp │ │ │ ├── basic_socket_streambuf.hpp │ │ │ ├── basic_stream_file.hpp │ │ │ ├── basic_stream_socket.hpp │ │ │ ├── basic_streambuf.hpp │ │ │ ├── basic_streambuf_fwd.hpp │ │ │ ├── basic_waitable_timer.hpp │ │ │ ├── basic_writable_pipe.hpp │ │ │ ├── bind_allocator.hpp │ │ │ ├── bind_cancellation_slot.hpp │ │ │ ├── bind_executor.hpp │ │ │ ├── bind_immediate_executor.hpp │ │ │ ├── buffer.hpp │ │ │ ├── buffer_registration.hpp │ │ │ ├── buffered_read_stream.hpp │ │ │ ├── buffered_read_stream_fwd.hpp │ │ │ ├── buffered_stream.hpp │ │ │ ├── buffered_stream_fwd.hpp │ │ │ ├── buffered_write_stream.hpp │ │ │ ├── buffered_write_stream_fwd.hpp │ │ │ ├── buffers_iterator.hpp │ │ │ ├── cancellation_signal.hpp │ │ │ ├── cancellation_state.hpp │ │ │ ├── cancellation_type.hpp │ │ │ ├── co_spawn.hpp │ │ │ ├── completion_condition.hpp │ │ │ ├── compose.hpp │ │ │ ├── connect.hpp │ │ │ ├── connect_pipe.hpp │ │ │ ├── consign.hpp │ │ │ ├── coroutine.hpp │ │ │ ├── deadline_timer.hpp │ │ │ ├── defer.hpp │ │ │ ├── deferred.hpp │ │ │ ├── detached.hpp │ │ │ ├── detail │ │ │ ├── array.hpp │ │ │ ├── array_fwd.hpp │ │ │ ├── assert.hpp │ │ │ ├── atomic_count.hpp │ │ │ ├── base_from_cancellation_state.hpp │ │ │ ├── base_from_completion_cond.hpp │ │ │ ├── bind_handler.hpp │ │ │ ├── blocking_executor_op.hpp │ │ │ ├── buffer_resize_guard.hpp │ │ │ ├── buffer_sequence_adapter.hpp │ │ │ ├── buffered_stream_storage.hpp │ │ │ ├── bulk_executor_op.hpp │ │ │ ├── call_stack.hpp │ │ │ ├── chrono.hpp │ │ │ ├── chrono_time_traits.hpp │ │ │ ├── completion_handler.hpp │ │ │ ├── composed_work.hpp │ │ │ ├── concurrency_hint.hpp │ │ │ ├── conditionally_enabled_event.hpp │ │ │ ├── conditionally_enabled_mutex.hpp │ │ │ ├── config.hpp │ │ │ ├── consuming_buffers.hpp │ │ │ ├── cstddef.hpp │ │ │ ├── cstdint.hpp │ │ │ ├── date_time_fwd.hpp │ │ │ ├── deadline_timer_service.hpp │ │ │ ├── dependent_type.hpp │ │ │ ├── descriptor_ops.hpp │ │ │ ├── descriptor_read_op.hpp │ │ │ ├── descriptor_write_op.hpp │ │ │ ├── dev_poll_reactor.hpp │ │ │ ├── epoll_reactor.hpp │ │ │ ├── event.hpp │ │ │ ├── eventfd_select_interrupter.hpp │ │ │ ├── exception.hpp │ │ │ ├── executor_function.hpp │ │ │ ├── executor_op.hpp │ │ │ ├── fd_set_adapter.hpp │ │ │ ├── fenced_block.hpp │ │ │ ├── functional.hpp │ │ │ ├── future.hpp │ │ │ ├── gcc_arm_fenced_block.hpp │ │ │ ├── gcc_hppa_fenced_block.hpp │ │ │ ├── gcc_sync_fenced_block.hpp │ │ │ ├── gcc_x86_fenced_block.hpp │ │ │ ├── global.hpp │ │ │ ├── handler_alloc_helpers.hpp │ │ │ ├── handler_cont_helpers.hpp │ │ │ ├── handler_invoke_helpers.hpp │ │ │ ├── handler_tracking.hpp │ │ │ ├── handler_type_requirements.hpp │ │ │ ├── handler_work.hpp │ │ │ ├── hash_map.hpp │ │ │ ├── impl │ │ │ │ ├── buffer_sequence_adapter.ipp │ │ │ │ ├── descriptor_ops.ipp │ │ │ │ ├── dev_poll_reactor.hpp │ │ │ │ ├── dev_poll_reactor.ipp │ │ │ │ ├── epoll_reactor.hpp │ │ │ │ ├── epoll_reactor.ipp │ │ │ │ ├── eventfd_select_interrupter.ipp │ │ │ │ ├── handler_tracking.ipp │ │ │ │ ├── io_uring_descriptor_service.ipp │ │ │ │ ├── io_uring_file_service.ipp │ │ │ │ ├── io_uring_service.hpp │ │ │ │ ├── io_uring_service.ipp │ │ │ │ ├── io_uring_socket_service_base.ipp │ │ │ │ ├── kqueue_reactor.hpp │ │ │ │ ├── kqueue_reactor.ipp │ │ │ │ ├── null_event.ipp │ │ │ │ ├── pipe_select_interrupter.ipp │ │ │ │ ├── posix_event.ipp │ │ │ │ ├── posix_mutex.ipp │ │ │ │ ├── posix_serial_port_service.ipp │ │ │ │ ├── posix_thread.ipp │ │ │ │ ├── posix_tss_ptr.ipp │ │ │ │ ├── reactive_descriptor_service.ipp │ │ │ │ ├── reactive_socket_service_base.ipp │ │ │ │ ├── resolver_service_base.ipp │ │ │ │ ├── scheduler.ipp │ │ │ │ ├── select_reactor.hpp │ │ │ │ ├── select_reactor.ipp │ │ │ │ ├── service_registry.hpp │ │ │ │ ├── service_registry.ipp │ │ │ │ ├── signal_set_service.ipp │ │ │ │ ├── socket_ops.ipp │ │ │ │ ├── socket_select_interrupter.ipp │ │ │ │ ├── strand_executor_service.hpp │ │ │ │ ├── strand_executor_service.ipp │ │ │ │ ├── strand_service.hpp │ │ │ │ ├── strand_service.ipp │ │ │ │ ├── thread_context.ipp │ │ │ │ ├── throw_error.ipp │ │ │ │ ├── timer_queue_ptime.ipp │ │ │ │ ├── timer_queue_set.ipp │ │ │ │ ├── win_event.ipp │ │ │ │ ├── win_iocp_file_service.ipp │ │ │ │ ├── win_iocp_handle_service.ipp │ │ │ │ ├── win_iocp_io_context.hpp │ │ │ │ ├── win_iocp_io_context.ipp │ │ │ │ ├── win_iocp_serial_port_service.ipp │ │ │ │ ├── win_iocp_socket_service_base.ipp │ │ │ │ ├── win_mutex.ipp │ │ │ │ ├── win_object_handle_service.ipp │ │ │ │ ├── win_static_mutex.ipp │ │ │ │ ├── win_thread.ipp │ │ │ │ ├── win_tss_ptr.ipp │ │ │ │ ├── winrt_ssocket_service_base.ipp │ │ │ │ ├── winrt_timer_scheduler.hpp │ │ │ │ ├── winrt_timer_scheduler.ipp │ │ │ │ └── winsock_init.ipp │ │ │ ├── initiate_defer.hpp │ │ │ ├── initiate_dispatch.hpp │ │ │ ├── initiate_post.hpp │ │ │ ├── io_control.hpp │ │ │ ├── io_object_impl.hpp │ │ │ ├── io_uring_descriptor_read_at_op.hpp │ │ │ ├── io_uring_descriptor_read_op.hpp │ │ │ ├── io_uring_descriptor_service.hpp │ │ │ ├── io_uring_descriptor_write_at_op.hpp │ │ │ ├── io_uring_descriptor_write_op.hpp │ │ │ ├── io_uring_file_service.hpp │ │ │ ├── io_uring_null_buffers_op.hpp │ │ │ ├── io_uring_operation.hpp │ │ │ ├── io_uring_service.hpp │ │ │ ├── io_uring_socket_accept_op.hpp │ │ │ ├── io_uring_socket_connect_op.hpp │ │ │ ├── io_uring_socket_recv_op.hpp │ │ │ ├── io_uring_socket_recvfrom_op.hpp │ │ │ ├── io_uring_socket_recvmsg_op.hpp │ │ │ ├── io_uring_socket_send_op.hpp │ │ │ ├── io_uring_socket_sendto_op.hpp │ │ │ ├── io_uring_socket_service.hpp │ │ │ ├── io_uring_socket_service_base.hpp │ │ │ ├── io_uring_wait_op.hpp │ │ │ ├── is_buffer_sequence.hpp │ │ │ ├── is_executor.hpp │ │ │ ├── keyword_tss_ptr.hpp │ │ │ ├── kqueue_reactor.hpp │ │ │ ├── limits.hpp │ │ │ ├── local_free_on_block_exit.hpp │ │ │ ├── macos_fenced_block.hpp │ │ │ ├── memory.hpp │ │ │ ├── mutex.hpp │ │ │ ├── non_const_lvalue.hpp │ │ │ ├── noncopyable.hpp │ │ │ ├── null_event.hpp │ │ │ ├── null_fenced_block.hpp │ │ │ ├── null_global.hpp │ │ │ ├── null_mutex.hpp │ │ │ ├── null_reactor.hpp │ │ │ ├── null_signal_blocker.hpp │ │ │ ├── null_socket_service.hpp │ │ │ ├── null_static_mutex.hpp │ │ │ ├── null_thread.hpp │ │ │ ├── null_tss_ptr.hpp │ │ │ ├── object_pool.hpp │ │ │ ├── old_win_sdk_compat.hpp │ │ │ ├── op_queue.hpp │ │ │ ├── operation.hpp │ │ │ ├── pipe_select_interrupter.hpp │ │ │ ├── pop_options.hpp │ │ │ ├── posix_event.hpp │ │ │ ├── posix_fd_set_adapter.hpp │ │ │ ├── posix_global.hpp │ │ │ ├── posix_mutex.hpp │ │ │ ├── posix_serial_port_service.hpp │ │ │ ├── posix_signal_blocker.hpp │ │ │ ├── posix_static_mutex.hpp │ │ │ ├── posix_thread.hpp │ │ │ ├── posix_tss_ptr.hpp │ │ │ ├── push_options.hpp │ │ │ ├── reactive_descriptor_service.hpp │ │ │ ├── reactive_null_buffers_op.hpp │ │ │ ├── reactive_socket_accept_op.hpp │ │ │ ├── reactive_socket_connect_op.hpp │ │ │ ├── reactive_socket_recv_op.hpp │ │ │ ├── reactive_socket_recvfrom_op.hpp │ │ │ ├── reactive_socket_recvmsg_op.hpp │ │ │ ├── reactive_socket_send_op.hpp │ │ │ ├── reactive_socket_sendto_op.hpp │ │ │ ├── reactive_socket_service.hpp │ │ │ ├── reactive_socket_service_base.hpp │ │ │ ├── reactive_wait_op.hpp │ │ │ ├── reactor.hpp │ │ │ ├── reactor_op.hpp │ │ │ ├── reactor_op_queue.hpp │ │ │ ├── recycling_allocator.hpp │ │ │ ├── regex_fwd.hpp │ │ │ ├── resolve_endpoint_op.hpp │ │ │ ├── resolve_op.hpp │ │ │ ├── resolve_query_op.hpp │ │ │ ├── resolver_service.hpp │ │ │ ├── resolver_service_base.hpp │ │ │ ├── scheduler.hpp │ │ │ ├── scheduler_operation.hpp │ │ │ ├── scheduler_task.hpp │ │ │ ├── scheduler_thread_info.hpp │ │ │ ├── scoped_lock.hpp │ │ │ ├── scoped_ptr.hpp │ │ │ ├── select_interrupter.hpp │ │ │ ├── select_reactor.hpp │ │ │ ├── service_registry.hpp │ │ │ ├── signal_blocker.hpp │ │ │ ├── signal_handler.hpp │ │ │ ├── signal_init.hpp │ │ │ ├── signal_op.hpp │ │ │ ├── signal_set_service.hpp │ │ │ ├── socket_holder.hpp │ │ │ ├── socket_ops.hpp │ │ │ ├── socket_option.hpp │ │ │ ├── socket_select_interrupter.hpp │ │ │ ├── socket_types.hpp │ │ │ ├── solaris_fenced_block.hpp │ │ │ ├── source_location.hpp │ │ │ ├── static_mutex.hpp │ │ │ ├── std_event.hpp │ │ │ ├── std_fenced_block.hpp │ │ │ ├── std_global.hpp │ │ │ ├── std_mutex.hpp │ │ │ ├── std_static_mutex.hpp │ │ │ ├── std_thread.hpp │ │ │ ├── strand_executor_service.hpp │ │ │ ├── strand_service.hpp │ │ │ ├── string_view.hpp │ │ │ ├── thread.hpp │ │ │ ├── thread_context.hpp │ │ │ ├── thread_group.hpp │ │ │ ├── thread_info_base.hpp │ │ │ ├── throw_error.hpp │ │ │ ├── throw_exception.hpp │ │ │ ├── timer_queue.hpp │ │ │ ├── timer_queue_base.hpp │ │ │ ├── timer_queue_ptime.hpp │ │ │ ├── timer_queue_set.hpp │ │ │ ├── timer_scheduler.hpp │ │ │ ├── timer_scheduler_fwd.hpp │ │ │ ├── tss_ptr.hpp │ │ │ ├── type_traits.hpp │ │ │ ├── utility.hpp │ │ │ ├── variadic_templates.hpp │ │ │ ├── wait_handler.hpp │ │ │ ├── wait_op.hpp │ │ │ ├── win_event.hpp │ │ │ ├── win_fd_set_adapter.hpp │ │ │ ├── win_fenced_block.hpp │ │ │ ├── win_global.hpp │ │ │ ├── win_iocp_file_service.hpp │ │ │ ├── win_iocp_handle_read_op.hpp │ │ │ ├── win_iocp_handle_service.hpp │ │ │ ├── win_iocp_handle_write_op.hpp │ │ │ ├── win_iocp_io_context.hpp │ │ │ ├── win_iocp_null_buffers_op.hpp │ │ │ ├── win_iocp_operation.hpp │ │ │ ├── win_iocp_overlapped_op.hpp │ │ │ ├── win_iocp_overlapped_ptr.hpp │ │ │ ├── win_iocp_serial_port_service.hpp │ │ │ ├── win_iocp_socket_accept_op.hpp │ │ │ ├── win_iocp_socket_connect_op.hpp │ │ │ ├── win_iocp_socket_recv_op.hpp │ │ │ ├── win_iocp_socket_recvfrom_op.hpp │ │ │ ├── win_iocp_socket_recvmsg_op.hpp │ │ │ ├── win_iocp_socket_send_op.hpp │ │ │ ├── win_iocp_socket_service.hpp │ │ │ ├── win_iocp_socket_service_base.hpp │ │ │ ├── win_iocp_thread_info.hpp │ │ │ ├── win_iocp_wait_op.hpp │ │ │ ├── win_mutex.hpp │ │ │ ├── win_object_handle_service.hpp │ │ │ ├── win_static_mutex.hpp │ │ │ ├── win_thread.hpp │ │ │ ├── win_tss_ptr.hpp │ │ │ ├── winapp_thread.hpp │ │ │ ├── wince_thread.hpp │ │ │ ├── winrt_async_manager.hpp │ │ │ ├── winrt_async_op.hpp │ │ │ ├── winrt_resolve_op.hpp │ │ │ ├── winrt_resolver_service.hpp │ │ │ ├── winrt_socket_connect_op.hpp │ │ │ ├── winrt_socket_recv_op.hpp │ │ │ ├── winrt_socket_send_op.hpp │ │ │ ├── winrt_ssocket_service.hpp │ │ │ ├── winrt_ssocket_service_base.hpp │ │ │ ├── winrt_timer_scheduler.hpp │ │ │ ├── winrt_utils.hpp │ │ │ ├── winsock_init.hpp │ │ │ ├── work_dispatcher.hpp │ │ │ └── wrapped_handler.hpp │ │ │ ├── dispatch.hpp │ │ │ ├── error.hpp │ │ │ ├── error_code.hpp │ │ │ ├── execution.hpp │ │ │ ├── execution │ │ │ ├── allocator.hpp │ │ │ ├── any_executor.hpp │ │ │ ├── bad_executor.hpp │ │ │ ├── blocking.hpp │ │ │ ├── blocking_adaptation.hpp │ │ │ ├── bulk_execute.hpp │ │ │ ├── bulk_guarantee.hpp │ │ │ ├── connect.hpp │ │ │ ├── context.hpp │ │ │ ├── context_as.hpp │ │ │ ├── detail │ │ │ │ ├── as_invocable.hpp │ │ │ │ ├── as_operation.hpp │ │ │ │ ├── as_receiver.hpp │ │ │ │ ├── bulk_sender.hpp │ │ │ │ ├── submit_receiver.hpp │ │ │ │ └── void_receiver.hpp │ │ │ ├── execute.hpp │ │ │ ├── executor.hpp │ │ │ ├── impl │ │ │ │ ├── bad_executor.ipp │ │ │ │ └── receiver_invocation_error.ipp │ │ │ ├── invocable_archetype.hpp │ │ │ ├── mapping.hpp │ │ │ ├── occupancy.hpp │ │ │ ├── operation_state.hpp │ │ │ ├── outstanding_work.hpp │ │ │ ├── prefer_only.hpp │ │ │ ├── receiver.hpp │ │ │ ├── receiver_invocation_error.hpp │ │ │ ├── relationship.hpp │ │ │ ├── schedule.hpp │ │ │ ├── scheduler.hpp │ │ │ ├── sender.hpp │ │ │ ├── set_done.hpp │ │ │ ├── set_error.hpp │ │ │ ├── set_value.hpp │ │ │ ├── start.hpp │ │ │ └── submit.hpp │ │ │ ├── execution_context.hpp │ │ │ ├── executor.hpp │ │ │ ├── executor_work_guard.hpp │ │ │ ├── experimental │ │ │ ├── append.hpp │ │ │ ├── as_single.hpp │ │ │ ├── as_tuple.hpp │ │ │ ├── awaitable_operators.hpp │ │ │ ├── basic_channel.hpp │ │ │ ├── basic_concurrent_channel.hpp │ │ │ ├── cancellation_condition.hpp │ │ │ ├── channel.hpp │ │ │ ├── channel_error.hpp │ │ │ ├── channel_traits.hpp │ │ │ ├── co_composed.hpp │ │ │ ├── co_spawn.hpp │ │ │ ├── concurrent_channel.hpp │ │ │ ├── coro.hpp │ │ │ ├── coro_traits.hpp │ │ │ ├── deferred.hpp │ │ │ ├── detail │ │ │ │ ├── channel_handler.hpp │ │ │ │ ├── channel_message.hpp │ │ │ │ ├── channel_operation.hpp │ │ │ │ ├── channel_payload.hpp │ │ │ │ ├── channel_receive_op.hpp │ │ │ │ ├── channel_send_functions.hpp │ │ │ │ ├── channel_send_op.hpp │ │ │ │ ├── channel_service.hpp │ │ │ │ ├── coro_completion_handler.hpp │ │ │ │ ├── coro_promise_allocator.hpp │ │ │ │ ├── has_signature.hpp │ │ │ │ ├── impl │ │ │ │ │ └── channel_service.hpp │ │ │ │ └── partial_promise.hpp │ │ │ ├── impl │ │ │ │ ├── as_single.hpp │ │ │ │ ├── channel_error.ipp │ │ │ │ ├── co_composed.hpp │ │ │ │ ├── coro.hpp │ │ │ │ ├── parallel_group.hpp │ │ │ │ ├── promise.hpp │ │ │ │ ├── use_coro.hpp │ │ │ │ └── use_promise.hpp │ │ │ ├── parallel_group.hpp │ │ │ ├── prepend.hpp │ │ │ ├── promise.hpp │ │ │ ├── use_coro.hpp │ │ │ └── use_promise.hpp │ │ │ ├── file_base.hpp │ │ │ ├── generic │ │ │ ├── basic_endpoint.hpp │ │ │ ├── datagram_protocol.hpp │ │ │ ├── detail │ │ │ │ ├── endpoint.hpp │ │ │ │ └── impl │ │ │ │ │ └── endpoint.ipp │ │ │ ├── raw_protocol.hpp │ │ │ ├── seq_packet_protocol.hpp │ │ │ └── stream_protocol.hpp │ │ │ ├── handler_alloc_hook.hpp │ │ │ ├── handler_continuation_hook.hpp │ │ │ ├── handler_invoke_hook.hpp │ │ │ ├── high_resolution_timer.hpp │ │ │ ├── impl │ │ │ ├── any_completion_executor.ipp │ │ │ ├── any_io_executor.ipp │ │ │ ├── append.hpp │ │ │ ├── as_tuple.hpp │ │ │ ├── awaitable.hpp │ │ │ ├── buffered_read_stream.hpp │ │ │ ├── buffered_write_stream.hpp │ │ │ ├── cancellation_signal.ipp │ │ │ ├── co_spawn.hpp │ │ │ ├── connect.hpp │ │ │ ├── connect_pipe.hpp │ │ │ ├── connect_pipe.ipp │ │ │ ├── consign.hpp │ │ │ ├── deferred.hpp │ │ │ ├── detached.hpp │ │ │ ├── error.ipp │ │ │ ├── error_code.ipp │ │ │ ├── execution_context.hpp │ │ │ ├── execution_context.ipp │ │ │ ├── executor.hpp │ │ │ ├── executor.ipp │ │ │ ├── handler_alloc_hook.ipp │ │ │ ├── io_context.hpp │ │ │ ├── io_context.ipp │ │ │ ├── multiple_exceptions.ipp │ │ │ ├── prepend.hpp │ │ │ ├── read.hpp │ │ │ ├── read_at.hpp │ │ │ ├── read_until.hpp │ │ │ ├── redirect_error.hpp │ │ │ ├── serial_port_base.hpp │ │ │ ├── serial_port_base.ipp │ │ │ ├── spawn.hpp │ │ │ ├── src.hpp │ │ │ ├── system_context.hpp │ │ │ ├── system_context.ipp │ │ │ ├── system_executor.hpp │ │ │ ├── thread_pool.hpp │ │ │ ├── thread_pool.ipp │ │ │ ├── use_awaitable.hpp │ │ │ ├── use_future.hpp │ │ │ ├── write.hpp │ │ │ └── write_at.hpp │ │ │ ├── io_context.hpp │ │ │ ├── io_context_strand.hpp │ │ │ ├── io_service.hpp │ │ │ ├── io_service_strand.hpp │ │ │ ├── ip │ │ │ ├── address.hpp │ │ │ ├── address_v4.hpp │ │ │ ├── address_v4_iterator.hpp │ │ │ ├── address_v4_range.hpp │ │ │ ├── address_v6.hpp │ │ │ ├── address_v6_iterator.hpp │ │ │ ├── address_v6_range.hpp │ │ │ ├── bad_address_cast.hpp │ │ │ ├── basic_endpoint.hpp │ │ │ ├── basic_resolver.hpp │ │ │ ├── basic_resolver_entry.hpp │ │ │ ├── basic_resolver_iterator.hpp │ │ │ ├── basic_resolver_query.hpp │ │ │ ├── basic_resolver_results.hpp │ │ │ ├── detail │ │ │ │ ├── endpoint.hpp │ │ │ │ ├── impl │ │ │ │ │ └── endpoint.ipp │ │ │ │ └── socket_option.hpp │ │ │ ├── host_name.hpp │ │ │ ├── icmp.hpp │ │ │ ├── impl │ │ │ │ ├── address.hpp │ │ │ │ ├── address.ipp │ │ │ │ ├── address_v4.hpp │ │ │ │ ├── address_v4.ipp │ │ │ │ ├── address_v6.hpp │ │ │ │ ├── address_v6.ipp │ │ │ │ ├── basic_endpoint.hpp │ │ │ │ ├── host_name.ipp │ │ │ │ ├── network_v4.hpp │ │ │ │ ├── network_v4.ipp │ │ │ │ ├── network_v6.hpp │ │ │ │ └── network_v6.ipp │ │ │ ├── multicast.hpp │ │ │ ├── network_v4.hpp │ │ │ ├── network_v6.hpp │ │ │ ├── resolver_base.hpp │ │ │ ├── resolver_query_base.hpp │ │ │ ├── tcp.hpp │ │ │ ├── udp.hpp │ │ │ ├── unicast.hpp │ │ │ └── v6_only.hpp │ │ │ ├── is_applicable_property.hpp │ │ │ ├── is_contiguous_iterator.hpp │ │ │ ├── is_executor.hpp │ │ │ ├── is_read_buffered.hpp │ │ │ ├── is_write_buffered.hpp │ │ │ ├── local │ │ │ ├── basic_endpoint.hpp │ │ │ ├── connect_pair.hpp │ │ │ ├── datagram_protocol.hpp │ │ │ ├── detail │ │ │ │ ├── endpoint.hpp │ │ │ │ └── impl │ │ │ │ │ └── endpoint.ipp │ │ │ ├── seq_packet_protocol.hpp │ │ │ └── stream_protocol.hpp │ │ │ ├── multiple_exceptions.hpp │ │ │ ├── packaged_task.hpp │ │ │ ├── placeholders.hpp │ │ │ ├── posix │ │ │ ├── basic_descriptor.hpp │ │ │ ├── basic_stream_descriptor.hpp │ │ │ ├── descriptor.hpp │ │ │ ├── descriptor_base.hpp │ │ │ └── stream_descriptor.hpp │ │ │ ├── post.hpp │ │ │ ├── prefer.hpp │ │ │ ├── prepend.hpp │ │ │ ├── query.hpp │ │ │ ├── random_access_file.hpp │ │ │ ├── read.hpp │ │ │ ├── read_at.hpp │ │ │ ├── read_until.hpp │ │ │ ├── readable_pipe.hpp │ │ │ ├── recycling_allocator.hpp │ │ │ ├── redirect_error.hpp │ │ │ ├── registered_buffer.hpp │ │ │ ├── require.hpp │ │ │ ├── require_concept.hpp │ │ │ ├── serial_port.hpp │ │ │ ├── serial_port_base.hpp │ │ │ ├── signal_set.hpp │ │ │ ├── signal_set_base.hpp │ │ │ ├── socket_base.hpp │ │ │ ├── spawn.hpp │ │ │ ├── ssl.hpp │ │ │ ├── ssl │ │ │ ├── context.hpp │ │ │ ├── context_base.hpp │ │ │ ├── detail │ │ │ │ ├── buffered_handshake_op.hpp │ │ │ │ ├── engine.hpp │ │ │ │ ├── handshake_op.hpp │ │ │ │ ├── impl │ │ │ │ │ ├── engine.ipp │ │ │ │ │ └── openssl_init.ipp │ │ │ │ ├── io.hpp │ │ │ │ ├── openssl_init.hpp │ │ │ │ ├── openssl_types.hpp │ │ │ │ ├── password_callback.hpp │ │ │ │ ├── read_op.hpp │ │ │ │ ├── shutdown_op.hpp │ │ │ │ ├── stream_core.hpp │ │ │ │ ├── verify_callback.hpp │ │ │ │ └── write_op.hpp │ │ │ ├── error.hpp │ │ │ ├── host_name_verification.hpp │ │ │ ├── impl │ │ │ │ ├── context.hpp │ │ │ │ ├── context.ipp │ │ │ │ ├── error.ipp │ │ │ │ ├── host_name_verification.ipp │ │ │ │ ├── rfc2818_verification.ipp │ │ │ │ └── src.hpp │ │ │ ├── rfc2818_verification.hpp │ │ │ ├── stream.hpp │ │ │ ├── stream_base.hpp │ │ │ ├── verify_context.hpp │ │ │ └── verify_mode.hpp │ │ │ ├── static_thread_pool.hpp │ │ │ ├── steady_timer.hpp │ │ │ ├── strand.hpp │ │ │ ├── stream_file.hpp │ │ │ ├── streambuf.hpp │ │ │ ├── system_context.hpp │ │ │ ├── system_error.hpp │ │ │ ├── system_executor.hpp │ │ │ ├── system_timer.hpp │ │ │ ├── this_coro.hpp │ │ │ ├── thread.hpp │ │ │ ├── thread_pool.hpp │ │ │ ├── time_traits.hpp │ │ │ ├── traits │ │ │ ├── bulk_execute_free.hpp │ │ │ ├── bulk_execute_member.hpp │ │ │ ├── connect_free.hpp │ │ │ ├── connect_member.hpp │ │ │ ├── equality_comparable.hpp │ │ │ ├── execute_free.hpp │ │ │ ├── execute_member.hpp │ │ │ ├── prefer_free.hpp │ │ │ ├── prefer_member.hpp │ │ │ ├── query_free.hpp │ │ │ ├── query_member.hpp │ │ │ ├── query_static_constexpr_member.hpp │ │ │ ├── require_concept_free.hpp │ │ │ ├── require_concept_member.hpp │ │ │ ├── require_free.hpp │ │ │ ├── require_member.hpp │ │ │ ├── schedule_free.hpp │ │ │ ├── schedule_member.hpp │ │ │ ├── set_done_free.hpp │ │ │ ├── set_done_member.hpp │ │ │ ├── set_error_free.hpp │ │ │ ├── set_error_member.hpp │ │ │ ├── set_value_free.hpp │ │ │ ├── set_value_member.hpp │ │ │ ├── start_free.hpp │ │ │ ├── start_member.hpp │ │ │ ├── static_query.hpp │ │ │ ├── static_require.hpp │ │ │ ├── static_require_concept.hpp │ │ │ ├── submit_free.hpp │ │ │ └── submit_member.hpp │ │ │ ├── ts │ │ │ ├── buffer.hpp │ │ │ ├── executor.hpp │ │ │ ├── internet.hpp │ │ │ ├── io_context.hpp │ │ │ ├── net.hpp │ │ │ ├── netfwd.hpp │ │ │ ├── socket.hpp │ │ │ └── timer.hpp │ │ │ ├── unyield.hpp │ │ │ ├── use_awaitable.hpp │ │ │ ├── use_future.hpp │ │ │ ├── uses_executor.hpp │ │ │ ├── version.hpp │ │ │ ├── wait_traits.hpp │ │ │ ├── windows │ │ │ ├── basic_object_handle.hpp │ │ │ ├── basic_overlapped_handle.hpp │ │ │ ├── basic_random_access_handle.hpp │ │ │ ├── basic_stream_handle.hpp │ │ │ ├── object_handle.hpp │ │ │ ├── overlapped_handle.hpp │ │ │ ├── overlapped_ptr.hpp │ │ │ ├── random_access_handle.hpp │ │ │ └── stream_handle.hpp │ │ │ ├── writable_pipe.hpp │ │ │ ├── write.hpp │ │ │ ├── write_at.hpp │ │ │ └── yield.hpp │ ├── LICENSE_1_0.txt │ ├── Makefile.am │ ├── Makefile.in │ ├── README │ ├── aclocal.m4 │ ├── asio.pc.in │ ├── compile │ ├── config.guess │ ├── config.sub │ ├── configure │ ├── configure.ac │ ├── depcomp │ ├── install-sh │ ├── missing │ ├── src │ │ ├── Makefile.am │ │ ├── Makefile.in │ │ ├── Makefile.mgw │ │ ├── Makefile.msc │ │ ├── asio.cpp │ │ ├── asio_ssl.cpp │ │ ├── examples │ │ │ ├── cpp03 │ │ │ │ ├── Makefile.am │ │ │ │ ├── Makefile.in │ │ │ │ ├── allocation │ │ │ │ │ └── server.cpp │ │ │ │ ├── buffers │ │ │ │ │ └── reference_counted.cpp │ │ │ │ ├── chat │ │ │ │ │ ├── chat_client.cpp │ │ │ │ │ ├── chat_message.hpp │ │ │ │ │ ├── chat_server.cpp │ │ │ │ │ └── posix_chat_client.cpp │ │ │ │ ├── echo │ │ │ │ │ ├── async_tcp_echo_server.cpp │ │ │ │ │ ├── async_udp_echo_server.cpp │ │ │ │ │ ├── blocking_tcp_echo_client.cpp │ │ │ │ │ ├── blocking_tcp_echo_server.cpp │ │ │ │ │ ├── blocking_udp_echo_client.cpp │ │ │ │ │ └── blocking_udp_echo_server.cpp │ │ │ │ ├── fork │ │ │ │ │ ├── daemon.cpp │ │ │ │ │ └── process_per_connection.cpp │ │ │ │ ├── http │ │ │ │ │ ├── client │ │ │ │ │ │ ├── async_client.cpp │ │ │ │ │ │ └── sync_client.cpp │ │ │ │ │ ├── server │ │ │ │ │ │ ├── connection.cpp │ │ │ │ │ │ ├── connection.hpp │ │ │ │ │ │ ├── connection_manager.cpp │ │ │ │ │ │ ├── connection_manager.hpp │ │ │ │ │ │ ├── header.hpp │ │ │ │ │ │ ├── main.cpp │ │ │ │ │ │ ├── mime_types.cpp │ │ │ │ │ │ ├── mime_types.hpp │ │ │ │ │ │ ├── reply.cpp │ │ │ │ │ │ ├── reply.hpp │ │ │ │ │ │ ├── request.hpp │ │ │ │ │ │ ├── request_handler.cpp │ │ │ │ │ │ ├── request_handler.hpp │ │ │ │ │ │ ├── request_parser.cpp │ │ │ │ │ │ ├── request_parser.hpp │ │ │ │ │ │ ├── server.cpp │ │ │ │ │ │ └── server.hpp │ │ │ │ │ ├── server2 │ │ │ │ │ │ ├── connection.cpp │ │ │ │ │ │ ├── connection.hpp │ │ │ │ │ │ ├── header.hpp │ │ │ │ │ │ ├── io_context_pool.cpp │ │ │ │ │ │ ├── io_context_pool.hpp │ │ │ │ │ │ ├── main.cpp │ │ │ │ │ │ ├── mime_types.cpp │ │ │ │ │ │ ├── mime_types.hpp │ │ │ │ │ │ ├── reply.cpp │ │ │ │ │ │ ├── reply.hpp │ │ │ │ │ │ ├── request.hpp │ │ │ │ │ │ ├── request_handler.cpp │ │ │ │ │ │ ├── request_handler.hpp │ │ │ │ │ │ ├── request_parser.cpp │ │ │ │ │ │ ├── request_parser.hpp │ │ │ │ │ │ ├── server.cpp │ │ │ │ │ │ └── server.hpp │ │ │ │ │ ├── server3 │ │ │ │ │ │ ├── connection.cpp │ │ │ │ │ │ ├── connection.hpp │ │ │ │ │ │ ├── header.hpp │ │ │ │ │ │ ├── main.cpp │ │ │ │ │ │ ├── mime_types.cpp │ │ │ │ │ │ ├── mime_types.hpp │ │ │ │ │ │ ├── reply.cpp │ │ │ │ │ │ ├── reply.hpp │ │ │ │ │ │ ├── request.hpp │ │ │ │ │ │ ├── request_handler.cpp │ │ │ │ │ │ ├── request_handler.hpp │ │ │ │ │ │ ├── request_parser.cpp │ │ │ │ │ │ ├── request_parser.hpp │ │ │ │ │ │ ├── server.cpp │ │ │ │ │ │ └── server.hpp │ │ │ │ │ └── server4 │ │ │ │ │ │ ├── file_handler.cpp │ │ │ │ │ │ ├── file_handler.hpp │ │ │ │ │ │ ├── header.hpp │ │ │ │ │ │ ├── main.cpp │ │ │ │ │ │ ├── mime_types.cpp │ │ │ │ │ │ ├── mime_types.hpp │ │ │ │ │ │ ├── reply.cpp │ │ │ │ │ │ ├── reply.hpp │ │ │ │ │ │ ├── request.hpp │ │ │ │ │ │ ├── request_parser.cpp │ │ │ │ │ │ ├── request_parser.hpp │ │ │ │ │ │ ├── server.cpp │ │ │ │ │ │ └── server.hpp │ │ │ │ ├── icmp │ │ │ │ │ ├── icmp_header.hpp │ │ │ │ │ ├── ipv4_header.hpp │ │ │ │ │ └── ping.cpp │ │ │ │ ├── invocation │ │ │ │ │ └── prioritised_handlers.cpp │ │ │ │ ├── iostreams │ │ │ │ │ ├── daytime_client.cpp │ │ │ │ │ ├── daytime_server.cpp │ │ │ │ │ └── http_client.cpp │ │ │ │ ├── local │ │ │ │ │ ├── connect_pair.cpp │ │ │ │ │ ├── iostream_client.cpp │ │ │ │ │ ├── stream_client.cpp │ │ │ │ │ └── stream_server.cpp │ │ │ │ ├── multicast │ │ │ │ │ ├── receiver.cpp │ │ │ │ │ └── sender.cpp │ │ │ │ ├── nonblocking │ │ │ │ │ └── third_party_lib.cpp │ │ │ │ ├── porthopper │ │ │ │ │ ├── client.cpp │ │ │ │ │ ├── protocol.hpp │ │ │ │ │ └── server.cpp │ │ │ │ ├── serialization │ │ │ │ │ ├── client.cpp │ │ │ │ │ ├── connection.hpp │ │ │ │ │ ├── server.cpp │ │ │ │ │ └── stock.hpp │ │ │ │ ├── services │ │ │ │ │ ├── basic_logger.hpp │ │ │ │ │ ├── daytime_client.cpp │ │ │ │ │ ├── logger.hpp │ │ │ │ │ ├── logger_service.cpp │ │ │ │ │ └── logger_service.hpp │ │ │ │ ├── socks4 │ │ │ │ │ ├── socks4.hpp │ │ │ │ │ └── sync_client.cpp │ │ │ │ ├── spawn │ │ │ │ │ ├── echo_server.cpp │ │ │ │ │ └── parallel_grep.cpp │ │ │ │ ├── ssl │ │ │ │ │ ├── README │ │ │ │ │ ├── ca.pem │ │ │ │ │ ├── client.cpp │ │ │ │ │ ├── dh4096.pem │ │ │ │ │ ├── server.cpp │ │ │ │ │ └── server.pem │ │ │ │ ├── timeouts │ │ │ │ │ ├── async_tcp_client.cpp │ │ │ │ │ ├── blocking_tcp_client.cpp │ │ │ │ │ ├── blocking_token_tcp_client.cpp │ │ │ │ │ ├── blocking_udp_client.cpp │ │ │ │ │ └── server.cpp │ │ │ │ ├── timers │ │ │ │ │ └── time_t_timer.cpp │ │ │ │ ├── tutorial │ │ │ │ │ ├── daytime1 │ │ │ │ │ │ └── client.cpp │ │ │ │ │ ├── daytime2 │ │ │ │ │ │ └── server.cpp │ │ │ │ │ ├── daytime3 │ │ │ │ │ │ └── server.cpp │ │ │ │ │ ├── daytime4 │ │ │ │ │ │ └── client.cpp │ │ │ │ │ ├── daytime5 │ │ │ │ │ │ └── server.cpp │ │ │ │ │ ├── daytime6 │ │ │ │ │ │ └── server.cpp │ │ │ │ │ ├── daytime7 │ │ │ │ │ │ └── server.cpp │ │ │ │ │ ├── timer1 │ │ │ │ │ │ └── timer.cpp │ │ │ │ │ ├── timer2 │ │ │ │ │ │ └── timer.cpp │ │ │ │ │ ├── timer3 │ │ │ │ │ │ └── timer.cpp │ │ │ │ │ ├── timer4 │ │ │ │ │ │ └── timer.cpp │ │ │ │ │ └── timer5 │ │ │ │ │ │ └── timer.cpp │ │ │ │ └── windows │ │ │ │ │ └── transmit_file.cpp │ │ │ ├── cpp11 │ │ │ │ ├── Makefile.am │ │ │ │ ├── Makefile.in │ │ │ │ ├── allocation │ │ │ │ │ └── server.cpp │ │ │ │ ├── buffers │ │ │ │ │ └── reference_counted.cpp │ │ │ │ ├── chat │ │ │ │ │ ├── chat_client.cpp │ │ │ │ │ ├── chat_message.hpp │ │ │ │ │ └── chat_server.cpp │ │ │ │ ├── deferred │ │ │ │ │ ├── deferred_1.cpp │ │ │ │ │ └── deferred_2.cpp │ │ │ │ ├── echo │ │ │ │ │ ├── async_tcp_echo_server.cpp │ │ │ │ │ ├── async_udp_echo_server.cpp │ │ │ │ │ ├── blocking_tcp_echo_client.cpp │ │ │ │ │ ├── blocking_tcp_echo_server.cpp │ │ │ │ │ ├── blocking_udp_echo_client.cpp │ │ │ │ │ └── blocking_udp_echo_server.cpp │ │ │ │ ├── executors │ │ │ │ │ ├── actor.cpp │ │ │ │ │ ├── bank_account_1.cpp │ │ │ │ │ ├── bank_account_2.cpp │ │ │ │ │ ├── fork_join.cpp │ │ │ │ │ ├── pipeline.cpp │ │ │ │ │ └── priority_scheduler.cpp │ │ │ │ ├── files │ │ │ │ │ ├── async_file_copy.cpp │ │ │ │ │ └── blocking_file_copy.cpp │ │ │ │ ├── fork │ │ │ │ │ ├── daemon.cpp │ │ │ │ │ └── process_per_connection.cpp │ │ │ │ ├── futures │ │ │ │ │ └── daytime_client.cpp │ │ │ │ ├── handler_tracking │ │ │ │ │ ├── async_tcp_echo_server.cpp │ │ │ │ │ └── custom_tracking.hpp │ │ │ │ ├── http │ │ │ │ │ └── server │ │ │ │ │ │ ├── connection.cpp │ │ │ │ │ │ ├── connection.hpp │ │ │ │ │ │ ├── connection_manager.cpp │ │ │ │ │ │ ├── connection_manager.hpp │ │ │ │ │ │ ├── header.hpp │ │ │ │ │ │ ├── main.cpp │ │ │ │ │ │ ├── mime_types.cpp │ │ │ │ │ │ ├── mime_types.hpp │ │ │ │ │ │ ├── reply.cpp │ │ │ │ │ │ ├── reply.hpp │ │ │ │ │ │ ├── request.hpp │ │ │ │ │ │ ├── request_handler.cpp │ │ │ │ │ │ ├── request_handler.hpp │ │ │ │ │ │ ├── request_parser.cpp │ │ │ │ │ │ ├── request_parser.hpp │ │ │ │ │ │ ├── server.cpp │ │ │ │ │ │ └── server.hpp │ │ │ │ ├── invocation │ │ │ │ │ └── prioritised_handlers.cpp │ │ │ │ ├── iostreams │ │ │ │ │ └── http_client.cpp │ │ │ │ ├── local │ │ │ │ │ ├── connect_pair.cpp │ │ │ │ │ ├── fd_passing_stream_client.cpp │ │ │ │ │ ├── fd_passing_stream_server.cpp │ │ │ │ │ ├── iostream_client.cpp │ │ │ │ │ ├── stream_client.cpp │ │ │ │ │ └── stream_server.cpp │ │ │ │ ├── multicast │ │ │ │ │ ├── receiver.cpp │ │ │ │ │ └── sender.cpp │ │ │ │ ├── nonblocking │ │ │ │ │ └── third_party_lib.cpp │ │ │ │ ├── operations │ │ │ │ │ ├── composed_1.cpp │ │ │ │ │ ├── composed_2.cpp │ │ │ │ │ ├── composed_3.cpp │ │ │ │ │ ├── composed_4.cpp │ │ │ │ │ ├── composed_5.cpp │ │ │ │ │ ├── composed_6.cpp │ │ │ │ │ ├── composed_7.cpp │ │ │ │ │ └── composed_8.cpp │ │ │ │ ├── parallel_group │ │ │ │ │ ├── ranged_wait_for_all.cpp │ │ │ │ │ ├── wait_for_all.cpp │ │ │ │ │ ├── wait_for_one.cpp │ │ │ │ │ ├── wait_for_one_error.cpp │ │ │ │ │ └── wait_for_one_success.cpp │ │ │ │ ├── socks4 │ │ │ │ │ ├── socks4.hpp │ │ │ │ │ └── sync_client.cpp │ │ │ │ ├── spawn │ │ │ │ │ ├── echo_server.cpp │ │ │ │ │ └── parallel_grep.cpp │ │ │ │ ├── ssl │ │ │ │ │ ├── README │ │ │ │ │ ├── ca.pem │ │ │ │ │ ├── client.cpp │ │ │ │ │ ├── dh4096.pem │ │ │ │ │ ├── server.cpp │ │ │ │ │ └── server.pem │ │ │ │ ├── timeouts │ │ │ │ │ ├── async_tcp_client.cpp │ │ │ │ │ ├── blocking_tcp_client.cpp │ │ │ │ │ ├── blocking_token_tcp_client.cpp │ │ │ │ │ ├── blocking_udp_client.cpp │ │ │ │ │ └── server.cpp │ │ │ │ ├── timers │ │ │ │ │ └── time_t_timer.cpp │ │ │ │ └── type_erasure │ │ │ │ │ ├── line_reader.hpp │ │ │ │ │ ├── main.cpp │ │ │ │ │ ├── sleep.cpp │ │ │ │ │ ├── sleep.hpp │ │ │ │ │ ├── stdin_line_reader.cpp │ │ │ │ │ └── stdin_line_reader.hpp │ │ │ ├── cpp14 │ │ │ │ ├── Makefile.am │ │ │ │ ├── Makefile.in │ │ │ │ ├── deferred │ │ │ │ │ ├── deferred_1.cpp │ │ │ │ │ ├── deferred_2.cpp │ │ │ │ │ ├── deferred_3.cpp │ │ │ │ │ ├── deferred_4.cpp │ │ │ │ │ ├── deferred_5.cpp │ │ │ │ │ ├── deferred_6.cpp │ │ │ │ │ └── deferred_7.cpp │ │ │ │ ├── echo │ │ │ │ │ ├── async_tcp_echo_server.cpp │ │ │ │ │ ├── async_udp_echo_server.cpp │ │ │ │ │ ├── blocking_tcp_echo_client.cpp │ │ │ │ │ ├── blocking_tcp_echo_server.cpp │ │ │ │ │ ├── blocking_udp_echo_client.cpp │ │ │ │ │ └── blocking_udp_echo_server.cpp │ │ │ │ ├── executors │ │ │ │ │ ├── actor.cpp │ │ │ │ │ ├── async_1.cpp │ │ │ │ │ ├── async_2.cpp │ │ │ │ │ ├── bank_account_1.cpp │ │ │ │ │ ├── bank_account_2.cpp │ │ │ │ │ ├── fork_join.cpp │ │ │ │ │ ├── pipeline.cpp │ │ │ │ │ └── priority_scheduler.cpp │ │ │ │ ├── iostreams │ │ │ │ │ └── http_client.cpp │ │ │ │ ├── operations │ │ │ │ │ ├── c_callback_wrapper.cpp │ │ │ │ │ ├── callback_wrapper.cpp │ │ │ │ │ ├── composed_1.cpp │ │ │ │ │ ├── composed_2.cpp │ │ │ │ │ ├── composed_3.cpp │ │ │ │ │ ├── composed_4.cpp │ │ │ │ │ ├── composed_5.cpp │ │ │ │ │ ├── composed_6.cpp │ │ │ │ │ ├── composed_7.cpp │ │ │ │ │ └── composed_8.cpp │ │ │ │ └── parallel_group │ │ │ │ │ ├── parallel_sort.cpp │ │ │ │ │ ├── ranged_wait_for_all.cpp │ │ │ │ │ ├── wait_for_all.cpp │ │ │ │ │ ├── wait_for_one.cpp │ │ │ │ │ ├── wait_for_one_error.cpp │ │ │ │ │ └── wait_for_one_success.cpp │ │ │ ├── cpp17 │ │ │ │ ├── Makefile.am │ │ │ │ ├── Makefile.in │ │ │ │ └── coroutines_ts │ │ │ │ │ ├── chat_server.cpp │ │ │ │ │ ├── echo_server.cpp │ │ │ │ │ ├── echo_server_with_as_single_default.cpp │ │ │ │ │ ├── echo_server_with_as_tuple_default.cpp │ │ │ │ │ ├── echo_server_with_default.cpp │ │ │ │ │ ├── range_based_for.cpp │ │ │ │ │ └── refactored_echo_server.cpp │ │ │ └── cpp20 │ │ │ │ ├── Makefile.am │ │ │ │ ├── Makefile.in │ │ │ │ ├── channels │ │ │ │ └── throttling_proxy.cpp │ │ │ │ ├── coroutines │ │ │ │ ├── chat_server.cpp │ │ │ │ ├── echo_server.cpp │ │ │ │ ├── echo_server_with_as_single_default.cpp │ │ │ │ ├── echo_server_with_as_tuple_default.cpp │ │ │ │ ├── echo_server_with_default.cpp │ │ │ │ ├── echo_server_with_deferred.cpp │ │ │ │ ├── echo_server_with_deferred_default.cpp │ │ │ │ ├── refactored_echo_server.cpp │ │ │ │ └── timeout.cpp │ │ │ │ ├── operations │ │ │ │ ├── c_callback_wrapper.cpp │ │ │ │ ├── callback_wrapper.cpp │ │ │ │ ├── composed_1.cpp │ │ │ │ ├── composed_2.cpp │ │ │ │ ├── composed_3.cpp │ │ │ │ ├── composed_4.cpp │ │ │ │ ├── composed_5.cpp │ │ │ │ ├── composed_6.cpp │ │ │ │ ├── composed_7.cpp │ │ │ │ └── composed_8.cpp │ │ │ │ └── type_erasure │ │ │ │ ├── line_reader.hpp │ │ │ │ ├── main.cpp │ │ │ │ ├── sleep.cpp │ │ │ │ ├── sleep.hpp │ │ │ │ ├── stdin_line_reader.cpp │ │ │ │ └── stdin_line_reader.hpp │ │ ├── tests │ │ │ ├── Makefile.am │ │ │ ├── Makefile.in │ │ │ ├── latency │ │ │ │ ├── allocator.hpp │ │ │ │ ├── high_res_clock.hpp │ │ │ │ ├── tcp_client.cpp │ │ │ │ ├── tcp_server.cpp │ │ │ │ ├── udp_client.cpp │ │ │ │ └── udp_server.cpp │ │ │ ├── performance │ │ │ │ ├── client.cpp │ │ │ │ ├── handler_allocator.hpp │ │ │ │ └── server.cpp │ │ │ ├── properties │ │ │ │ ├── Makefile.am │ │ │ │ ├── Makefile.in │ │ │ │ ├── cpp03 │ │ │ │ │ ├── can_prefer_free_prefer.cpp │ │ │ │ │ ├── can_prefer_free_require.cpp │ │ │ │ │ ├── can_prefer_member_prefer.cpp │ │ │ │ │ ├── can_prefer_member_require.cpp │ │ │ │ │ ├── can_prefer_not_applicable_free_prefer.cpp │ │ │ │ │ ├── can_prefer_not_applicable_free_require.cpp │ │ │ │ │ ├── can_prefer_not_applicable_member_prefer.cpp │ │ │ │ │ ├── can_prefer_not_applicable_member_require.cpp │ │ │ │ │ ├── can_prefer_not_applicable_static.cpp │ │ │ │ │ ├── can_prefer_not_applicable_unsupported.cpp │ │ │ │ │ ├── can_prefer_not_preferable_free_prefer.cpp │ │ │ │ │ ├── can_prefer_not_preferable_free_require.cpp │ │ │ │ │ ├── can_prefer_not_preferable_member_prefer.cpp │ │ │ │ │ ├── can_prefer_not_preferable_member_require.cpp │ │ │ │ │ ├── can_prefer_not_preferable_static.cpp │ │ │ │ │ ├── can_prefer_not_preferable_unsupported.cpp │ │ │ │ │ ├── can_prefer_static.cpp │ │ │ │ │ ├── can_prefer_unsupported.cpp │ │ │ │ │ ├── can_query_free.cpp │ │ │ │ │ ├── can_query_member.cpp │ │ │ │ │ ├── can_query_not_applicable_free.cpp │ │ │ │ │ ├── can_query_not_applicable_member.cpp │ │ │ │ │ ├── can_query_not_applicable_static.cpp │ │ │ │ │ ├── can_query_not_applicable_unsupported.cpp │ │ │ │ │ ├── can_query_static.cpp │ │ │ │ │ ├── can_query_unsupported.cpp │ │ │ │ │ ├── can_require_concept_free.cpp │ │ │ │ │ ├── can_require_concept_member.cpp │ │ │ │ │ ├── can_require_concept_not_applicable_free.cpp │ │ │ │ │ ├── can_require_concept_not_applicable_member.cpp │ │ │ │ │ ├── can_require_concept_not_applicable_static.cpp │ │ │ │ │ ├── can_require_concept_not_applicable_unsupported.cpp │ │ │ │ │ ├── can_require_concept_static.cpp │ │ │ │ │ ├── can_require_concept_unsupported.cpp │ │ │ │ │ ├── can_require_free.cpp │ │ │ │ │ ├── can_require_member.cpp │ │ │ │ │ ├── can_require_not_applicable_free.cpp │ │ │ │ │ ├── can_require_not_applicable_member.cpp │ │ │ │ │ ├── can_require_not_applicable_static.cpp │ │ │ │ │ ├── can_require_not_applicable_unsupported.cpp │ │ │ │ │ ├── can_require_static.cpp │ │ │ │ │ ├── can_require_unsupported.cpp │ │ │ │ │ ├── prefer_free_prefer.cpp │ │ │ │ │ ├── prefer_free_require.cpp │ │ │ │ │ ├── prefer_member_prefer.cpp │ │ │ │ │ ├── prefer_member_require.cpp │ │ │ │ │ ├── prefer_static.cpp │ │ │ │ │ ├── prefer_unsupported.cpp │ │ │ │ │ ├── query_free.cpp │ │ │ │ │ ├── query_member.cpp │ │ │ │ │ ├── query_static.cpp │ │ │ │ │ ├── require_concept_free.cpp │ │ │ │ │ ├── require_concept_member.cpp │ │ │ │ │ ├── require_concept_static.cpp │ │ │ │ │ ├── require_free.cpp │ │ │ │ │ ├── require_member.cpp │ │ │ │ │ └── require_static.cpp │ │ │ │ ├── cpp11 │ │ │ │ │ ├── can_prefer_free_prefer.cpp │ │ │ │ │ ├── can_prefer_free_require.cpp │ │ │ │ │ ├── can_prefer_member_prefer.cpp │ │ │ │ │ ├── can_prefer_member_require.cpp │ │ │ │ │ ├── can_prefer_not_applicable_free_prefer.cpp │ │ │ │ │ ├── can_prefer_not_applicable_free_require.cpp │ │ │ │ │ ├── can_prefer_not_applicable_member_prefer.cpp │ │ │ │ │ ├── can_prefer_not_applicable_member_require.cpp │ │ │ │ │ ├── can_prefer_not_applicable_static.cpp │ │ │ │ │ ├── can_prefer_not_applicable_unsupported.cpp │ │ │ │ │ ├── can_prefer_not_preferable_free_prefer.cpp │ │ │ │ │ ├── can_prefer_not_preferable_free_require.cpp │ │ │ │ │ ├── can_prefer_not_preferable_member_prefer.cpp │ │ │ │ │ ├── can_prefer_not_preferable_member_require.cpp │ │ │ │ │ ├── can_prefer_not_preferable_static.cpp │ │ │ │ │ ├── can_prefer_not_preferable_unsupported.cpp │ │ │ │ │ ├── can_prefer_static.cpp │ │ │ │ │ ├── can_prefer_unsupported.cpp │ │ │ │ │ ├── can_query_free.cpp │ │ │ │ │ ├── can_query_member.cpp │ │ │ │ │ ├── can_query_not_applicable_free.cpp │ │ │ │ │ ├── can_query_not_applicable_member.cpp │ │ │ │ │ ├── can_query_not_applicable_static.cpp │ │ │ │ │ ├── can_query_not_applicable_unsupported.cpp │ │ │ │ │ ├── can_query_static.cpp │ │ │ │ │ ├── can_query_unsupported.cpp │ │ │ │ │ ├── can_require_concept_free.cpp │ │ │ │ │ ├── can_require_concept_member.cpp │ │ │ │ │ ├── can_require_concept_not_applicable_free.cpp │ │ │ │ │ ├── can_require_concept_not_applicable_member.cpp │ │ │ │ │ ├── can_require_concept_not_applicable_static.cpp │ │ │ │ │ ├── can_require_concept_not_applicable_unsupported.cpp │ │ │ │ │ ├── can_require_concept_static.cpp │ │ │ │ │ ├── can_require_concept_unsupported.cpp │ │ │ │ │ ├── can_require_free.cpp │ │ │ │ │ ├── can_require_member.cpp │ │ │ │ │ ├── can_require_not_applicable_free.cpp │ │ │ │ │ ├── can_require_not_applicable_member.cpp │ │ │ │ │ ├── can_require_not_applicable_static.cpp │ │ │ │ │ ├── can_require_not_applicable_unsupported.cpp │ │ │ │ │ ├── can_require_static.cpp │ │ │ │ │ ├── can_require_unsupported.cpp │ │ │ │ │ ├── prefer_free_prefer.cpp │ │ │ │ │ ├── prefer_free_require.cpp │ │ │ │ │ ├── prefer_member_prefer.cpp │ │ │ │ │ ├── prefer_member_require.cpp │ │ │ │ │ ├── prefer_static.cpp │ │ │ │ │ ├── prefer_unsupported.cpp │ │ │ │ │ ├── query_free.cpp │ │ │ │ │ ├── query_member.cpp │ │ │ │ │ ├── query_static.cpp │ │ │ │ │ ├── require_concept_free.cpp │ │ │ │ │ ├── require_concept_member.cpp │ │ │ │ │ ├── require_concept_static.cpp │ │ │ │ │ ├── require_free.cpp │ │ │ │ │ ├── require_member.cpp │ │ │ │ │ └── require_static.cpp │ │ │ │ └── cpp14 │ │ │ │ │ ├── can_prefer_free_prefer.cpp │ │ │ │ │ ├── can_prefer_free_require.cpp │ │ │ │ │ ├── can_prefer_member_prefer.cpp │ │ │ │ │ ├── can_prefer_member_require.cpp │ │ │ │ │ ├── can_prefer_not_applicable_free_prefer.cpp │ │ │ │ │ ├── can_prefer_not_applicable_free_require.cpp │ │ │ │ │ ├── can_prefer_not_applicable_member_prefer.cpp │ │ │ │ │ ├── can_prefer_not_applicable_member_require.cpp │ │ │ │ │ ├── can_prefer_not_applicable_static.cpp │ │ │ │ │ ├── can_prefer_not_applicable_unsupported.cpp │ │ │ │ │ ├── can_prefer_not_preferable_free_prefer.cpp │ │ │ │ │ ├── can_prefer_not_preferable_free_require.cpp │ │ │ │ │ ├── can_prefer_not_preferable_member_prefer.cpp │ │ │ │ │ ├── can_prefer_not_preferable_member_require.cpp │ │ │ │ │ ├── can_prefer_not_preferable_static.cpp │ │ │ │ │ ├── can_prefer_not_preferable_unsupported.cpp │ │ │ │ │ ├── can_prefer_static.cpp │ │ │ │ │ ├── can_prefer_unsupported.cpp │ │ │ │ │ ├── can_query_free.cpp │ │ │ │ │ ├── can_query_member.cpp │ │ │ │ │ ├── can_query_not_applicable_free.cpp │ │ │ │ │ ├── can_query_not_applicable_member.cpp │ │ │ │ │ ├── can_query_not_applicable_static.cpp │ │ │ │ │ ├── can_query_not_applicable_unsupported.cpp │ │ │ │ │ ├── can_query_static.cpp │ │ │ │ │ ├── can_query_unsupported.cpp │ │ │ │ │ ├── can_require_concept_free.cpp │ │ │ │ │ ├── can_require_concept_member.cpp │ │ │ │ │ ├── can_require_concept_not_applicable_free.cpp │ │ │ │ │ ├── can_require_concept_not_applicable_member.cpp │ │ │ │ │ ├── can_require_concept_not_applicable_static.cpp │ │ │ │ │ ├── can_require_concept_not_applicable_unsupported.cpp │ │ │ │ │ ├── can_require_concept_static.cpp │ │ │ │ │ ├── can_require_concept_unsupported.cpp │ │ │ │ │ ├── can_require_free.cpp │ │ │ │ │ ├── can_require_member.cpp │ │ │ │ │ ├── can_require_not_applicable_free.cpp │ │ │ │ │ ├── can_require_not_applicable_member.cpp │ │ │ │ │ ├── can_require_not_applicable_static.cpp │ │ │ │ │ ├── can_require_not_applicable_unsupported.cpp │ │ │ │ │ ├── can_require_static.cpp │ │ │ │ │ ├── can_require_unsupported.cpp │ │ │ │ │ ├── prefer_free_prefer.cpp │ │ │ │ │ ├── prefer_free_require.cpp │ │ │ │ │ ├── prefer_member_prefer.cpp │ │ │ │ │ ├── prefer_member_require.cpp │ │ │ │ │ ├── prefer_static.cpp │ │ │ │ │ ├── prefer_unsupported.cpp │ │ │ │ │ ├── query_free.cpp │ │ │ │ │ ├── query_member.cpp │ │ │ │ │ ├── query_static.cpp │ │ │ │ │ ├── require_concept_free.cpp │ │ │ │ │ ├── require_concept_member.cpp │ │ │ │ │ ├── require_concept_static.cpp │ │ │ │ │ ├── require_free.cpp │ │ │ │ │ ├── require_member.cpp │ │ │ │ │ └── require_static.cpp │ │ │ └── unit │ │ │ │ ├── append.cpp │ │ │ │ ├── archetypes │ │ │ │ ├── async_ops.hpp │ │ │ │ ├── async_result.hpp │ │ │ │ ├── gettable_socket_option.hpp │ │ │ │ ├── io_control_command.hpp │ │ │ │ └── settable_socket_option.hpp │ │ │ │ ├── as_tuple.cpp │ │ │ │ ├── associated_allocator.cpp │ │ │ │ ├── associated_cancellation_slot.cpp │ │ │ │ ├── associated_executor.cpp │ │ │ │ ├── associated_immediate_executor.cpp │ │ │ │ ├── associator.cpp │ │ │ │ ├── async_result.cpp │ │ │ │ ├── awaitable.cpp │ │ │ │ ├── basic_datagram_socket.cpp │ │ │ │ ├── basic_deadline_timer.cpp │ │ │ │ ├── basic_file.cpp │ │ │ │ ├── basic_random_access_file.cpp │ │ │ │ ├── basic_raw_socket.cpp │ │ │ │ ├── basic_readable_pipe.cpp │ │ │ │ ├── basic_seq_packet_socket.cpp │ │ │ │ ├── basic_serial_port.cpp │ │ │ │ ├── basic_signal_set.cpp │ │ │ │ ├── basic_socket.cpp │ │ │ │ ├── basic_socket_acceptor.cpp │ │ │ │ ├── basic_stream_file.cpp │ │ │ │ ├── basic_stream_socket.cpp │ │ │ │ ├── basic_streambuf.cpp │ │ │ │ ├── basic_waitable_timer.cpp │ │ │ │ ├── basic_writable_pipe.cpp │ │ │ │ ├── bind_allocator.cpp │ │ │ │ ├── bind_cancellation_slot.cpp │ │ │ │ ├── bind_executor.cpp │ │ │ │ ├── bind_immediate_executor.cpp │ │ │ │ ├── buffer.cpp │ │ │ │ ├── buffer_registration.cpp │ │ │ │ ├── buffered_read_stream.cpp │ │ │ │ ├── buffered_stream.cpp │ │ │ │ ├── buffered_write_stream.cpp │ │ │ │ ├── buffers_iterator.cpp │ │ │ │ ├── cancellation_signal.cpp │ │ │ │ ├── cancellation_state.cpp │ │ │ │ ├── cancellation_type.cpp │ │ │ │ ├── co_spawn.cpp │ │ │ │ ├── completion_condition.cpp │ │ │ │ ├── compose.cpp │ │ │ │ ├── connect.cpp │ │ │ │ ├── connect_pipe.cpp │ │ │ │ ├── consign.cpp │ │ │ │ ├── coroutine.cpp │ │ │ │ ├── deadline_timer.cpp │ │ │ │ ├── defer.cpp │ │ │ │ ├── deferred.cpp │ │ │ │ ├── detached.cpp │ │ │ │ ├── dispatch.cpp │ │ │ │ ├── error.cpp │ │ │ │ ├── execution │ │ │ │ ├── any_executor.cpp │ │ │ │ ├── blocking.cpp │ │ │ │ ├── blocking_adaptation.cpp │ │ │ │ ├── bulk_execute.cpp │ │ │ │ ├── bulk_guarantee.cpp │ │ │ │ ├── connect.cpp │ │ │ │ ├── context_as.cpp │ │ │ │ ├── execute.cpp │ │ │ │ ├── executor.cpp │ │ │ │ ├── invocable_archetype.cpp │ │ │ │ ├── mapping.cpp │ │ │ │ ├── operation_state.cpp │ │ │ │ ├── outstanding_work.cpp │ │ │ │ ├── prefer_only.cpp │ │ │ │ ├── receiver.cpp │ │ │ │ ├── relationship.cpp │ │ │ │ ├── schedule.cpp │ │ │ │ ├── scheduler.cpp │ │ │ │ ├── sender.cpp │ │ │ │ ├── set_done.cpp │ │ │ │ ├── set_error.cpp │ │ │ │ ├── set_value.cpp │ │ │ │ ├── start.cpp │ │ │ │ └── submit.cpp │ │ │ │ ├── execution_context.cpp │ │ │ │ ├── executor.cpp │ │ │ │ ├── executor_work_guard.cpp │ │ │ │ ├── experimental │ │ │ │ ├── awaitable_operators.cpp │ │ │ │ ├── basic_channel.cpp │ │ │ │ ├── basic_concurrent_channel.cpp │ │ │ │ ├── channel.cpp │ │ │ │ ├── channel_traits.cpp │ │ │ │ ├── co_composed.cpp │ │ │ │ ├── concurrent_channel.cpp │ │ │ │ ├── coro │ │ │ │ │ ├── allocator.cpp │ │ │ │ │ ├── cancel.cpp │ │ │ │ │ ├── co_spawn.cpp │ │ │ │ │ ├── exception.cpp │ │ │ │ │ ├── executor.cpp │ │ │ │ │ ├── partial.cpp │ │ │ │ │ ├── simple_test.cpp │ │ │ │ │ ├── stack_test.cpp │ │ │ │ │ └── use_coro.cpp │ │ │ │ └── promise.cpp │ │ │ │ ├── file_base.cpp │ │ │ │ ├── generic │ │ │ │ ├── basic_endpoint.cpp │ │ │ │ ├── datagram_protocol.cpp │ │ │ │ ├── raw_protocol.cpp │ │ │ │ ├── seq_packet_protocol.cpp │ │ │ │ └── stream_protocol.cpp │ │ │ │ ├── high_resolution_timer.cpp │ │ │ │ ├── io_context.cpp │ │ │ │ ├── io_context_strand.cpp │ │ │ │ ├── ip │ │ │ │ ├── address.cpp │ │ │ │ ├── address_v4.cpp │ │ │ │ ├── address_v4_iterator.cpp │ │ │ │ ├── address_v4_range.cpp │ │ │ │ ├── address_v6.cpp │ │ │ │ ├── address_v6_iterator.cpp │ │ │ │ ├── address_v6_range.cpp │ │ │ │ ├── basic_endpoint.cpp │ │ │ │ ├── basic_resolver.cpp │ │ │ │ ├── basic_resolver_entry.cpp │ │ │ │ ├── basic_resolver_iterator.cpp │ │ │ │ ├── basic_resolver_query.cpp │ │ │ │ ├── host_name.cpp │ │ │ │ ├── icmp.cpp │ │ │ │ ├── multicast.cpp │ │ │ │ ├── network_v4.cpp │ │ │ │ ├── network_v6.cpp │ │ │ │ ├── resolver_query_base.cpp │ │ │ │ ├── tcp.cpp │ │ │ │ ├── udp.cpp │ │ │ │ ├── unicast.cpp │ │ │ │ └── v6_only.cpp │ │ │ │ ├── is_read_buffered.cpp │ │ │ │ ├── is_write_buffered.cpp │ │ │ │ ├── local │ │ │ │ ├── basic_endpoint.cpp │ │ │ │ ├── connect_pair.cpp │ │ │ │ ├── datagram_protocol.cpp │ │ │ │ ├── seq_packet_protocol.cpp │ │ │ │ └── stream_protocol.cpp │ │ │ │ ├── packaged_task.cpp │ │ │ │ ├── placeholders.cpp │ │ │ │ ├── posix │ │ │ │ ├── basic_descriptor.cpp │ │ │ │ ├── basic_stream_descriptor.cpp │ │ │ │ ├── descriptor.cpp │ │ │ │ ├── descriptor_base.cpp │ │ │ │ └── stream_descriptor.cpp │ │ │ │ ├── post.cpp │ │ │ │ ├── prepend.cpp │ │ │ │ ├── random_access_file.cpp │ │ │ │ ├── read.cpp │ │ │ │ ├── read_at.cpp │ │ │ │ ├── read_until.cpp │ │ │ │ ├── readable_pipe.cpp │ │ │ │ ├── recycling_allocator.cpp │ │ │ │ ├── redirect_error.cpp │ │ │ │ ├── registered_buffer.cpp │ │ │ │ ├── serial_port.cpp │ │ │ │ ├── serial_port_base.cpp │ │ │ │ ├── signal_set.cpp │ │ │ │ ├── signal_set_base.cpp │ │ │ │ ├── socket_base.cpp │ │ │ │ ├── ssl │ │ │ │ ├── context.cpp │ │ │ │ ├── context_base.cpp │ │ │ │ ├── error.cpp │ │ │ │ ├── host_name_verification.cpp │ │ │ │ ├── rfc2818_verification.cpp │ │ │ │ ├── stream.cpp │ │ │ │ └── stream_base.cpp │ │ │ │ ├── static_thread_pool.cpp │ │ │ │ ├── steady_timer.cpp │ │ │ │ ├── strand.cpp │ │ │ │ ├── stream_file.cpp │ │ │ │ ├── streambuf.cpp │ │ │ │ ├── system_context.cpp │ │ │ │ ├── system_executor.cpp │ │ │ │ ├── system_timer.cpp │ │ │ │ ├── this_coro.cpp │ │ │ │ ├── thread.cpp │ │ │ │ ├── thread_pool.cpp │ │ │ │ ├── time_traits.cpp │ │ │ │ ├── ts │ │ │ │ ├── buffer.cpp │ │ │ │ ├── executor.cpp │ │ │ │ ├── internet.cpp │ │ │ │ ├── io_context.cpp │ │ │ │ ├── net.cpp │ │ │ │ ├── netfwd.cpp │ │ │ │ ├── socket.cpp │ │ │ │ └── timer.cpp │ │ │ │ ├── unit_test.hpp │ │ │ │ ├── use_awaitable.cpp │ │ │ │ ├── use_future.cpp │ │ │ │ ├── uses_executor.cpp │ │ │ │ ├── wait_traits.cpp │ │ │ │ ├── windows │ │ │ │ ├── basic_object_handle.cpp │ │ │ │ ├── basic_overlapped_handle.cpp │ │ │ │ ├── basic_random_access_handle.cpp │ │ │ │ ├── basic_stream_handle.cpp │ │ │ │ ├── object_handle.cpp │ │ │ │ ├── overlapped_handle.cpp │ │ │ │ ├── overlapped_ptr.cpp │ │ │ │ ├── random_access_handle.cpp │ │ │ │ └── stream_handle.cpp │ │ │ │ ├── writable_pipe.cpp │ │ │ │ ├── write.cpp │ │ │ │ └── write_at.cpp │ │ └── tools │ │ │ ├── handlerlive.pl │ │ │ ├── handlertree.pl │ │ │ └── handlerviz.pl │ └── test-driver ├── Brotli │ ├── BUILD │ ├── CMakeLists.txt │ ├── CONTRIBUTING.md │ ├── LICENSE │ ├── MANIFEST.in │ ├── Makefile │ ├── Makefile.am │ ├── README │ ├── README.md │ ├── WORKSPACE │ ├── bootstrap │ ├── c │ │ ├── common │ │ │ ├── constants.c │ │ │ ├── constants.h │ │ │ ├── context.c │ │ │ ├── context.h │ │ │ ├── dictionary.c │ │ │ ├── dictionary.h │ │ │ ├── platform.c │ │ │ ├── platform.h │ │ │ ├── shared_dictionary.c │ │ │ ├── shared_dictionary_internal.h │ │ │ ├── transform.c │ │ │ ├── transform.h │ │ │ └── version.h │ │ ├── dec │ │ │ ├── bit_reader.c │ │ │ ├── bit_reader.h │ │ │ ├── decode.c │ │ │ ├── huffman.c │ │ │ ├── huffman.h │ │ │ ├── prefix.h │ │ │ ├── state.c │ │ │ └── state.h │ │ ├── enc │ │ │ ├── backward_references.c │ │ │ ├── backward_references.h │ │ │ ├── backward_references_hq.c │ │ │ ├── backward_references_hq.h │ │ │ ├── backward_references_inc.h │ │ │ ├── bit_cost.c │ │ │ ├── bit_cost.h │ │ │ ├── bit_cost_inc.h │ │ │ ├── block_encoder_inc.h │ │ │ ├── block_splitter.c │ │ │ ├── block_splitter.h │ │ │ ├── block_splitter_inc.h │ │ │ ├── brotli_bit_stream.c │ │ │ ├── brotli_bit_stream.h │ │ │ ├── cluster.c │ │ │ ├── cluster.h │ │ │ ├── cluster_inc.h │ │ │ ├── command.c │ │ │ ├── command.h │ │ │ ├── compound_dictionary.c │ │ │ ├── compound_dictionary.h │ │ │ ├── compress_fragment.c │ │ │ ├── compress_fragment.h │ │ │ ├── compress_fragment_two_pass.c │ │ │ ├── compress_fragment_two_pass.h │ │ │ ├── dictionary_hash.c │ │ │ ├── dictionary_hash.h │ │ │ ├── encode.c │ │ │ ├── encoder_dict.c │ │ │ ├── encoder_dict.h │ │ │ ├── entropy_encode.c │ │ │ ├── entropy_encode.h │ │ │ ├── entropy_encode_static.h │ │ │ ├── fast_log.c │ │ │ ├── fast_log.h │ │ │ ├── find_match_length.h │ │ │ ├── hash.h │ │ │ ├── hash_composite_inc.h │ │ │ ├── hash_forgetful_chain_inc.h │ │ │ ├── hash_longest_match64_inc.h │ │ │ ├── hash_longest_match_inc.h │ │ │ ├── hash_longest_match_quickly_inc.h │ │ │ ├── hash_rolling_inc.h │ │ │ ├── hash_to_binary_tree_inc.h │ │ │ ├── histogram.c │ │ │ ├── histogram.h │ │ │ ├── histogram_inc.h │ │ │ ├── literal_cost.c │ │ │ ├── literal_cost.h │ │ │ ├── memory.c │ │ │ ├── memory.h │ │ │ ├── metablock.c │ │ │ ├── metablock.h │ │ │ ├── metablock_inc.h │ │ │ ├── params.h │ │ │ ├── prefix.h │ │ │ ├── quality.h │ │ │ ├── ringbuffer.h │ │ │ ├── state.h │ │ │ ├── static_dict.c │ │ │ ├── static_dict.h │ │ │ ├── static_dict_lut.h │ │ │ ├── utf8_util.c │ │ │ ├── utf8_util.h │ │ │ └── write_bits.h │ │ ├── include │ │ │ └── brotli │ │ │ │ ├── decode.h │ │ │ │ ├── encode.h │ │ │ │ ├── port.h │ │ │ │ ├── shared_dictionary.h │ │ │ │ └── types.h │ │ └── tools │ │ │ ├── brotli.c │ │ │ └── brotli.md │ ├── compiler_config_setting.bzl │ ├── configure │ ├── configure-cmake │ ├── configure.ac │ ├── docs │ │ ├── brotli.1 │ │ ├── brotli.svg │ │ ├── constants.h.3 │ │ ├── decode.h.3 │ │ ├── encode.h.3 │ │ └── types.h.3 │ ├── python │ │ ├── Makefile │ │ ├── README.md │ │ ├── _brotli.c │ │ ├── bro.py │ │ ├── brotli.py │ │ └── tests │ │ │ ├── __init__.py │ │ │ ├── _test_utils.py │ │ │ ├── bro_test.py │ │ │ ├── compress_test.py │ │ │ ├── compressor_test.py │ │ │ ├── decompress_test.py │ │ │ └── decompressor_test.py │ ├── scripts │ │ ├── libbrotlicommon.pc.in │ │ ├── libbrotlidec.pc.in │ │ ├── libbrotlienc.pc.in │ │ └── sources.lst │ ├── setup.cfg │ ├── setup.py │ └── tests │ │ ├── Makefile │ │ ├── compatibility_test.sh │ │ ├── roundtrip_test.sh │ │ ├── run-compatibility-test.cmake │ │ ├── run-roundtrip-test.cmake │ │ └── testdata │ │ ├── empty │ │ ├── empty.compressed │ │ ├── ukkonooa │ │ └── ukkonooa.compressed └── RapidJSON │ └── Include │ ├── README │ └── RapidJson │ ├── allocators.h │ ├── cursorstreamwrapper.h │ ├── document.h │ ├── encodedstream.h │ ├── encodings.h │ ├── error │ ├── en.h │ └── error.h │ ├── filereadstream.h │ ├── filewritestream.h │ ├── fwd.h │ ├── internal │ ├── biginteger.h │ ├── clzll.h │ ├── diyfp.h │ ├── dtoa.h │ ├── ieee754.h │ ├── itoa.h │ ├── meta.h │ ├── pow10.h │ ├── regex.h │ ├── stack.h │ ├── strfunc.h │ ├── strtod.h │ └── swap.h │ ├── istreamwrapper.h │ ├── memorybuffer.h │ ├── memorystream.h │ ├── msinttypes │ ├── inttypes.h │ └── stdint.h │ ├── ostreamwrapper.h │ ├── pointer.h │ ├── prettywriter.h │ ├── rapidjson.h │ ├── reader.h │ ├── schema.h │ ├── stream.h │ ├── stringbuffer.h │ └── writer.h └── Tool ├── Analysis.cpp ├── Create.cpp └── Generator.cpp /.gitignore: -------------------------------------------------------------------------------- 1 | # Prerequisites 2 | *.d 3 | 4 | # Compiled Object files 5 | *.slo 6 | *.lo 7 | *.o 8 | *.obj 9 | 10 | # Precompiled Headers 11 | *.gch 12 | *.pch 13 | 14 | # Compiled Dynamic libraries 15 | *.so 16 | *.dylib 17 | *.dll 18 | 19 | # Fortran module files 20 | *.mod 21 | *.smod 22 | 23 | # Compiled Static libraries 24 | *.lai 25 | *.la 26 | *.a 27 | *.lib 28 | 29 | # Executables 30 | *.exe 31 | *.out 32 | *.app 33 | 34 | # Directory 35 | /.vs 36 | /out 37 | /Bin 38 | /Lib 39 | /.idea 40 | /build 41 | /build* 42 | 43 | # File 44 | .ycm_extra_conf.py 45 | CMakeSettings.json 46 | CMakeLists.txt.user 47 | compile_commands.json 48 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "ThirdParty/GoogleTest"] 2 | path = ThirdParty/GoogleTest 3 | url = https://github.com/google/googletest 4 | branch = v1.12.x 5 | -------------------------------------------------------------------------------- /Examples/Base/Main.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * @Author: INotFound 3 | * @Date: 2020-12-17 11:52:32 4 | * @LastEditTime: 2021-02-01 23:47:05 5 | */ 6 | #include "Base.h" 7 | 8 | int main(){ 9 | Safe application = std::make_shared(); 10 | application->initialize(); 11 | return EXIT_SUCCESS; 12 | } 13 | -------------------------------------------------------------------------------- /Examples/Base/Test.h: -------------------------------------------------------------------------------- 1 | /* 2 | * @Author: INotFound 3 | * @Date: 2020-12-17 15:31:24 4 | * @LastEditTime: 2021-02-01 23:09:40 5 | */ 6 | #pragma once 7 | #include "Base.h" 8 | 9 | // 注入示例 10 | namespace Base{ 11 | class Test{ 12 | public: 13 | Test(){ 14 | std::printf("Testing\n"); 15 | } 16 | void printf(const std::string& msg){ 17 | std::printf("%s\n",msg.c_str()); 18 | } 19 | }; 20 | } 21 | -------------------------------------------------------------------------------- /Examples/Base/Test.json: -------------------------------------------------------------------------------- 1 | { 2 | "Configurations":{ 3 | "NameSpace":"Base", 4 | "Registered":[ 5 | { 6 | "Id":"test", 7 | "Class":"Base::Test", 8 | "IncludePath": "Base/Test.h", 9 | "Dependencies":[], 10 | "FunctionPropertys":[] 11 | } 12 | ], 13 | "Initialize":[ 14 | { 15 | "Id":"test", 16 | "InvokeFunctions":{ 17 | "printf" : ["\"你好啊,我是小白君!\""] 18 | } 19 | } 20 | ], 21 | "Constructor":{ 22 | "Name":"Initialize", 23 | "WithParameter": false 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /Examples/Base/TestConfig.h: -------------------------------------------------------------------------------- 1 | /* 2 | * @Author: INotFound 3 | * @Date: 2020-12-17 15:31:24 4 | * @LastEditTime: 2021-01-13 07:44:12 5 | */ 6 | #pragma once 7 | #include "TestLog.h" 8 | #include "Base.h" 9 | // 注入示例 10 | namespace Base{ 11 | class TestConfig{ 12 | public: 13 | TestConfig(const Safe& configuration){ 14 | uint32_t num = configuration->at("Number",0); 15 | MAGIC_DEBUG() << "get Config Value[Number]: " << num; 16 | } 17 | void call(const Safe& log){ 18 | log->printf("testttttttt"); 19 | } 20 | }; 21 | } 22 | -------------------------------------------------------------------------------- /Examples/Base/TestConfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "Configurations":{ 3 | "NameSpace":"Base", 4 | "Registered":[ 5 | { 6 | "Id":"testConfig", 7 | "Class":"Base::TestConfig", 8 | "IncludePath": "Base/TestConfig.h", 9 | "Dependencies":["Magic::Config"], 10 | "FunctionPropertys":["call"] 11 | } 12 | ], 13 | "Initialize":[ 14 | ], 15 | "Constructor":{ 16 | "Name":"Initialize", 17 | "WithParameter": true 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /Examples/Base/TestLog.h: -------------------------------------------------------------------------------- 1 | /* 2 | * @Author: INotFound 3 | * @Date: 2020-12-17 15:31:24 4 | * @LastEditTime: 2021-02-01 23:09:16 5 | */ 6 | #pragma once 7 | #include "Base.h" 8 | 9 | // 注入示例 10 | namespace Base{ 11 | class TestLog{ 12 | public: 13 | TestLog(){ 14 | MAGIC_DEBUG() << "Testing"; 15 | } 16 | void printf(const std::string& msg){ 17 | MAGIC_DEBUG() << msg; 18 | } 19 | }; 20 | } 21 | -------------------------------------------------------------------------------- /Examples/Base/TestLog.json: -------------------------------------------------------------------------------- 1 | { 2 | "Configurations":{ 3 | "NameSpace":"Base", 4 | "Registered":[ 5 | { 6 | "Id":"testLog", 7 | "Class":"Base::TestLog", 8 | "IncludePath": "Base/TestLog.h", 9 | "Dependencies":[], 10 | "FunctionPropertys":[] 11 | } 12 | ], 13 | "Initialize":[ 14 | { 15 | "Id":"testLog", 16 | "FunctionPropertys":["printf"], 17 | "FunctionArguments":{ 18 | "printf" : ["\"你好啊,我是小白君!\""] 19 | } 20 | } 21 | ], 22 | "Constructor":{ 23 | "Name":"Initialize", 24 | "WithParameter": true 25 | } 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /Examples/WebServer/TestServlet.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * @Author: INotFound 3 | * @Date: 2020-12-17 17:57:35 4 | * @LastEditTime: 2020-12-21 14:02:57 5 | */ 6 | #include "TestServlet.h" 7 | 8 | namespace Web{ 9 | TestServlet::TestServlet(){ 10 | } 11 | 12 | void TestServlet::test(const Safe& httpSocket){ 13 | std::string helloMagic{R"Template( 14 | Hello Magic 15 | 16 |

Hello Magic

17 |
Magic/2.0.0
18 | 19 | )Template"}; 20 | httpSocket->getResponse()->setBody(helloMagic) 21 | ->setStatus(HttpStatus::OK); 22 | httpSocket->sendResponse(httpSocket->getResponse()); 23 | } 24 | } -------------------------------------------------------------------------------- /Examples/WebServer/TestServlet.h: -------------------------------------------------------------------------------- 1 | /* 2 | * @Author: INotFound 3 | * @Date: 2020-12-17 17:57:31 4 | * @LastEditTime: 2020-12-21 13:55:26 5 | */ 6 | #pragma once 7 | #include 8 | 9 | namespace Web{ 10 | using namespace Magic::NetWork::Http; 11 | class TestServlet :public IHttpServlet{ 12 | public: 13 | TestServlet(); 14 | void test(const Safe& httpSocket); 15 | }; 16 | } 17 | -------------------------------------------------------------------------------- /Examples/WebServer/TestServlet.json: -------------------------------------------------------------------------------- 1 | { 2 | "Configurations":{ 3 | "NameSpace":"Web", 4 | "Registered":[ 5 | { 6 | "Id":"testServlet", 7 | "Class":"Web::TestServlet", 8 | "Interface":"Magic::NetWork::Http::IHttpServlet", 9 | "IncludePath":"WebServer/TestServlet.h", 10 | "Dependencies":[], 11 | "FunctionPropertys":[] 12 | } 13 | ], 14 | "Initialize":[ 15 | { 16 | "Id":"testServlet", 17 | "InvokeFunctions":{ 18 | "addRoute":["\"/test\"","&Web::TestServlet::test"] 19 | } 20 | } 21 | ], 22 | "Constructor":{ 23 | "Name":"Initialize", 24 | "WithParameter": true 25 | } 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /Examples/WebServer/main.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * @Author: INotFound 3 | * @Date: 2020-12-17 16:24:54 4 | * @LastEditTime: 2020-12-17 17:56:19 5 | */ 6 | #include 7 | #include "WebServer.h" 8 | int main(){ 9 | Safe application = std::make_shared(); 10 | auto& ioc = application->initialize(); 11 | ioc->resolve()->run(); 12 | return EXIT_SUCCESS; 13 | } 14 | -------------------------------------------------------------------------------- /Include/Magic/Core/Adapter.hpp: -------------------------------------------------------------------------------- 1 | /* 2 | ****************************************************************************** 3 | * @Author : INotfound 4 | * @File : Adapter.hpp 5 | * @Date : 2023-07-03 18:24 6 | ****************************************************************************** 7 | */ 8 | #pragma once 9 | 10 | #if defined(_WIN32) || defined(_WIN64) 11 | #define WIN32_LEAN_AND_MEAN 12 | #include 13 | #include 14 | #include 15 | #include 16 | #undef DELETE 17 | #endif 18 | 19 | #if (defined(linux) || defined(__linux__)) 20 | #include 21 | #include 22 | #include 23 | #include 24 | #include 25 | #include 26 | #endif 27 | -------------------------------------------------------------------------------- /Include/Magic/Core/Except.hpp: -------------------------------------------------------------------------------- 1 | /* 2 | ****************************************************************************** 3 | * @Author : INotfound 4 | * @File : Except.hpp 5 | * @Date : 2023-07-03 18:26 6 | ****************************************************************************** 7 | */ 8 | #pragma once 9 | 10 | #include 11 | 12 | #include "Magic/Core/StringView.hpp" 13 | 14 | namespace Magic{ 15 | class Failure:public std::runtime_error{ 16 | public: 17 | explicit Failure(const StringView& error); 18 | }; 19 | } 20 | -------------------------------------------------------------------------------- /Include/Magic/Core/SystemUtils.hpp: -------------------------------------------------------------------------------- 1 | /* 2 | ****************************************************************************** 3 | * @Author : INotfound 4 | * @File : SystemUtils.hpp 5 | * @Date : 2023-07-03 18:27 6 | ****************************************************************************** 7 | */ 8 | #pragma once 9 | #include 10 | namespace Magic{ 11 | /** 12 | * @brief 获取线程Id 13 | * @return: 返回线程Id 14 | */ 15 | uint64_t GetThreadId(); 16 | /** 17 | * @brief 获取当前时间 18 | * @return: 返回当前时间 19 | */ 20 | uint64_t GetCurrentTimeMS(); 21 | 22 | /** 23 | * @brief 获取当前时间 24 | * @return: 返回当前时间 25 | */ 26 | uint64_t GetCurrentTimeUS(); 27 | /** 28 | * @brief 判断是否为文件 29 | * @param path 文件路径 30 | * @return: True 是 False 否 31 | */ 32 | bool IsFile(const StringView& path); 33 | } -------------------------------------------------------------------------------- /Include/Magic/NetWork/Http/Utils/http11_common.hpp: -------------------------------------------------------------------------------- 1 | #ifndef http11_common_h 2 | #define http11_common_h 3 | 4 | #include 5 | #include 6 | 7 | typedef void (*element_cb)(void *data, const char *at, size_t length); 8 | typedef void (*field_cb)(void *data, const char *field, size_t flen, const char *value, size_t vlen); 9 | 10 | #endif -------------------------------------------------------------------------------- /Include/Magic/NetWork/Http/Utils/http11_parser.hpp: -------------------------------------------------------------------------------- 1 | #ifndef http11_parser_h 2 | #define http11_parser_h 3 | 4 | #include "http11_common.hpp" 5 | 6 | typedef struct http_parser { 7 | int cs; 8 | size_t body_start; 9 | int content_len; 10 | size_t nread; 11 | size_t mark; 12 | size_t field_start; 13 | size_t field_len; 14 | size_t query_start; 15 | int xml_sent; 16 | int json_sent; 17 | 18 | void *data; 19 | 20 | int uri_relaxed; 21 | field_cb http_field; 22 | element_cb request_method; 23 | element_cb request_uri; 24 | element_cb fragment; 25 | element_cb request_path; 26 | element_cb query_string; 27 | element_cb http_version; 28 | element_cb header_done; 29 | 30 | } http_parser; 31 | 32 | int http_parser_init(http_parser *parser); 33 | int http_parser_finish(http_parser *parser); 34 | size_t http_parser_execute(http_parser *parser, const char *data, size_t len, size_t off); 35 | int http_parser_has_error(http_parser *parser); 36 | int http_parser_is_finished(http_parser *parser); 37 | 38 | #define http_parser_nread(parser) (parser)->nread 39 | 40 | #endif -------------------------------------------------------------------------------- /Source/Magic/Core/Except.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | ****************************************************************************** 3 | * @Author : INotfound 4 | * @File : Except.cpp 5 | * @Date : 2023-07-19 12:33 6 | ****************************************************************************** 7 | */ 8 | #include "Magic/Core/Except.hpp" 9 | 10 | namespace Magic{ 11 | Failure::Failure(const StringView& error) 12 | :std::runtime_error(error.data()){ 13 | } 14 | } -------------------------------------------------------------------------------- /Tests/UnitTrace.cpp: -------------------------------------------------------------------------------- 1 | #include "gtest/gtest.h" 2 | #include "Magic/Utilty/Trace.hpp" 3 | 4 | void testFunc(){ 5 | for(auto i = 0;i<100;i++){ 6 | MAGIC_TRACE_FUNCTION(); 7 | } 8 | } 9 | 10 | TEST(MagicTraceTest,Trace){ 11 | Magic::g_TraceAppender = std::make_shared("trace.json"); 12 | testFunc(); 13 | Magic::g_TraceAppender->complete(); 14 | } 15 | -------------------------------------------------------------------------------- /Tests/main.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * @Author: INotFound 3 | * @Date: 2020-12-17 00:35:45 4 | * @LastEditTime: 2021-01-18 06:00:25 5 | */ 6 | #include "gtest/gtest.h" 7 | 8 | int main(int argc,char** argv){ 9 | testing::InitGoogleTest(&argc, argv); 10 | return RUN_ALL_TESTS(); 11 | } 12 | 13 | -------------------------------------------------------------------------------- /ThirdParty/Asio/COPYING: -------------------------------------------------------------------------------- 1 | Copyright (c) 2003-2023 Christopher M. Kohlhoff (chris at kohlhoff dot com) 2 | 3 | Distributed under the Boost Software License, Version 1.0. (See accompanying 4 | file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) 5 | -------------------------------------------------------------------------------- /ThirdParty/Asio/INSTALL: -------------------------------------------------------------------------------- 1 | See doc/index.html for information on: 2 | - External dependencies 3 | - Using, building, and configuring Asio 4 | - Supported platforms 5 | - How to build the tests and examples 6 | -------------------------------------------------------------------------------- /ThirdParty/Asio/Include/asio/associator.hpp: -------------------------------------------------------------------------------- 1 | // 2 | // associator.hpp 3 | // ~~~~~~~~~~~~~~ 4 | // 5 | // Copyright (c) 2003-2023 Christopher M. Kohlhoff (chris at kohlhoff dot com) 6 | // 7 | // Distributed under the Boost Software License, Version 1.0. (See accompanying 8 | // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) 9 | // 10 | 11 | #ifndef ASIO_ASSOCIATOR_HPP 12 | #define ASIO_ASSOCIATOR_HPP 13 | 14 | #if defined(_MSC_VER) && (_MSC_VER >= 1200) 15 | # pragma once 16 | #endif // defined(_MSC_VER) && (_MSC_VER >= 1200) 17 | 18 | #include "asio/detail/config.hpp" 19 | 20 | #include "asio/detail/push_options.hpp" 21 | 22 | namespace asio { 23 | 24 | /// Used to generically specialise associators for a type. 25 | template