You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-commits@hadoop.apache.org by wh...@apache.org on 2015/07/11 02:10:02 UTC
[43/46] hadoop git commit: HDFS-8724. Import third_party libraries
into the repository. Contributed by Haohui Mai.
HDFS-8724. Import third_party libraries into the repository. Contributed by Haohui Mai.
Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo
Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/5b488f3e
Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/5b488f3e
Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/5b488f3e
Branch: refs/heads/HDFS-8707
Commit: 5b488f3e97e169f9e606420b0372b07181046206
Parents: 37154a9
Author: Haohui Mai <wh...@apache.org>
Authored: Tue Jul 7 11:23:00 2015 -0700
Committer: Haohui Mai <wh...@apache.org>
Committed: Fri Jul 10 17:08:31 2015 -0700
----------------------------------------------------------------------
.../src/main/native/CMakeLists.txt | 2 +
.../src/main/native/libhdfspp/CMakeLists.txt | 35 +
.../libhdfspp/third_party/asio-1.10.2/COPYING | 4 +
.../third_party/asio-1.10.2/include/asio.hpp | 122 +
.../asio-1.10.2/include/asio/async_result.hpp | 94 +
.../include/asio/basic_datagram_socket.hpp | 949 +
.../include/asio/basic_deadline_timer.hpp | 518 +
.../include/asio/basic_io_object.hpp | 240 +
.../include/asio/basic_raw_socket.hpp | 940 +
.../include/asio/basic_seq_packet_socket.hpp | 565 +
.../include/asio/basic_serial_port.hpp | 695 +
.../include/asio/basic_signal_set.hpp | 384 +
.../asio-1.10.2/include/asio/basic_socket.hpp | 1518 ++
.../include/asio/basic_socket_acceptor.hpp | 1136 +
.../include/asio/basic_socket_iostream.hpp | 286 +
.../include/asio/basic_socket_streambuf.hpp | 567 +
.../include/asio/basic_stream_socket.hpp | 852 +
.../include/asio/basic_streambuf.hpp | 369 +
.../include/asio/basic_streambuf_fwd.hpp | 33 +
.../include/asio/basic_waitable_timer.hpp | 519 +
.../asio-1.10.2/include/asio/buffer.hpp | 2239 ++
.../include/asio/buffered_read_stream.hpp | 244 +
.../include/asio/buffered_read_stream_fwd.hpp | 25 +
.../include/asio/buffered_stream.hpp | 258 +
.../include/asio/buffered_stream_fwd.hpp | 25 +
.../include/asio/buffered_write_stream.hpp | 236 +
.../include/asio/buffered_write_stream_fwd.hpp | 25 +
.../include/asio/buffers_iterator.hpp | 481 +
.../include/asio/completion_condition.hpp | 218 +
.../asio-1.10.2/include/asio/connect.hpp | 823 +
.../asio-1.10.2/include/asio/coroutine.hpp | 328 +
.../include/asio/datagram_socket_service.hpp | 432 +
.../asio-1.10.2/include/asio/deadline_timer.hpp | 40 +
.../include/asio/deadline_timer_service.hpp | 171 +
.../include/asio/detail/addressof.hpp | 38 +
.../asio-1.10.2/include/asio/detail/array.hpp | 38 +
.../include/asio/detail/array_fwd.hpp | 34 +
.../asio-1.10.2/include/asio/detail/assert.hpp | 32 +
.../include/asio/detail/atomic_count.hpp | 45 +
.../asio/detail/base_from_completion_cond.hpp | 68 +
.../include/asio/detail/bind_handler.hpp | 489 +
.../include/asio/detail/buffer_resize_guard.hpp | 66 +
.../asio/detail/buffer_sequence_adapter.hpp | 383 +
.../asio/detail/buffered_stream_storage.hpp | 126 +
.../include/asio/detail/call_stack.hpp | 125 +
.../include/asio/detail/chrono_time_traits.hpp | 190 +
.../include/asio/detail/completion_handler.hpp | 81 +
.../asio-1.10.2/include/asio/detail/config.hpp | 895 +
.../include/asio/detail/consuming_buffers.hpp | 292 +
.../asio-1.10.2/include/asio/detail/cstdint.hpp | 46 +
.../include/asio/detail/date_time_fwd.hpp | 34 +
.../asio/detail/deadline_timer_service.hpp | 227 +
.../include/asio/detail/dependent_type.hpp | 36 +
.../include/asio/detail/descriptor_ops.hpp | 117 +
.../include/asio/detail/descriptor_read_op.hpp | 119 +
.../include/asio/detail/descriptor_write_op.hpp | 119 +
.../include/asio/detail/dev_poll_reactor.hpp | 210 +
.../include/asio/detail/epoll_reactor.hpp | 242 +
.../asio-1.10.2/include/asio/detail/event.hpp | 48 +
.../asio/detail/eventfd_select_interrupter.hpp | 83 +
.../include/asio/detail/fd_set_adapter.hpp | 39 +
.../include/asio/detail/fenced_block.hpp | 76 +
.../include/asio/detail/function.hpp | 38 +
.../asio/detail/gcc_arm_fenced_block.hpp | 89 +
.../asio/detail/gcc_hppa_fenced_block.hpp | 66 +
.../asio/detail/gcc_sync_fenced_block.hpp | 63 +
.../asio/detail/gcc_x86_fenced_block.hpp | 89 +
.../asio/detail/handler_alloc_helpers.hpp | 82 +
.../asio/detail/handler_cont_helpers.hpp | 45 +
.../asio/detail/handler_invoke_helpers.hpp | 57 +
.../include/asio/detail/handler_tracking.hpp | 159 +
.../asio/detail/handler_type_requirements.hpp | 488 +
.../include/asio/detail/hash_map.hpp | 331 +
.../detail/impl/buffer_sequence_adapter.ipp | 118 +
.../include/asio/detail/impl/descriptor_ops.ipp | 451 +
.../asio/detail/impl/dev_poll_reactor.hpp | 78 +
.../asio/detail/impl/dev_poll_reactor.ipp | 445 +
.../include/asio/detail/impl/epoll_reactor.hpp | 76 +
.../include/asio/detail/impl/epoll_reactor.ipp | 662 +
.../detail/impl/eventfd_select_interrupter.ipp | 165 +
.../asio/detail/impl/handler_tracking.ipp | 305 +
.../include/asio/detail/impl/kqueue_reactor.hpp | 80 +
.../include/asio/detail/impl/kqueue_reactor.ipp | 463 +
.../detail/impl/pipe_select_interrupter.ipp | 124 +
.../include/asio/detail/impl/posix_event.ipp | 47 +
.../include/asio/detail/impl/posix_mutex.ipp | 46 +
.../include/asio/detail/impl/posix_thread.ipp | 74 +
.../include/asio/detail/impl/posix_tss_ptr.ipp | 46 +
.../detail/impl/reactive_descriptor_service.ipp | 208 +
.../impl/reactive_serial_port_service.ipp | 151 +
.../impl/reactive_socket_service_base.ipp | 267 +
.../asio/detail/impl/resolver_service_base.ipp | 130 +
.../include/asio/detail/impl/select_reactor.hpp | 87 +
.../include/asio/detail/impl/select_reactor.ipp | 313 +
.../asio/detail/impl/service_registry.hpp | 88 +
.../asio/detail/impl/service_registry.ipp | 188 +
.../asio/detail/impl/signal_set_service.ipp | 647 +
.../include/asio/detail/impl/socket_ops.ipp | 3394 +++
.../detail/impl/socket_select_interrupter.ipp | 175 +
.../include/asio/detail/impl/strand_service.hpp | 118 +
.../include/asio/detail/impl/strand_service.ipp | 176 +
.../asio/detail/impl/task_io_service.hpp | 78 +
.../asio/detail/impl/task_io_service.ipp | 474 +
.../include/asio/detail/impl/throw_error.ipp | 60 +
.../asio/detail/impl/timer_queue_ptime.ipp | 84 +
.../asio/detail/impl/timer_queue_set.ipp | 101 +
.../include/asio/detail/impl/win_event.ipp | 67 +
.../detail/impl/win_iocp_handle_service.ipp | 528 +
.../asio/detail/impl/win_iocp_io_service.hpp | 130 +
.../asio/detail/impl/win_iocp_io_service.ipp | 531 +
.../impl/win_iocp_serial_port_service.ipp | 180 +
.../impl/win_iocp_socket_service_base.ipp | 728 +
.../include/asio/detail/impl/win_mutex.ipp | 78 +
.../detail/impl/win_object_handle_service.ipp | 444 +
.../asio/detail/impl/win_static_mutex.ipp | 118 +
.../include/asio/detail/impl/win_thread.ipp | 139 +
.../include/asio/detail/impl/win_tss_ptr.ipp | 57 +
.../detail/impl/winrt_ssocket_service_base.ipp | 612 +
.../asio/detail/impl/winrt_timer_scheduler.hpp | 79 +
.../asio/detail/impl/winrt_timer_scheduler.ipp | 122 +
.../include/asio/detail/impl/winsock_init.ipp | 82 +
.../include/asio/detail/io_control.hpp | 134 +
.../include/asio/detail/keyword_tss_ptr.hpp | 70 +
.../include/asio/detail/kqueue_reactor.hpp | 219 +
.../asio-1.10.2/include/asio/detail/limits.hpp | 26 +
.../asio/detail/local_free_on_block_exit.hpp | 57 +
.../include/asio/detail/macos_fenced_block.hpp | 61 +
.../asio-1.10.2/include/asio/detail/mutex.hpp | 48 +
.../include/asio/detail/noncopyable.hpp | 43 +
.../include/asio/detail/null_event.hpp | 88 +
.../include/asio/detail/null_fenced_block.hpp | 45 +
.../include/asio/detail/null_mutex.hpp | 64 +
.../include/asio/detail/null_reactor.hpp | 67 +
.../include/asio/detail/null_signal_blocker.hpp | 69 +
.../include/asio/detail/null_socket_service.hpp | 497 +
.../include/asio/detail/null_static_mutex.hpp | 60 +
.../include/asio/detail/null_thread.hpp | 61 +
.../include/asio/detail/null_tss_ptr.hpp | 68 +
.../include/asio/detail/object_pool.hpp | 146 +
.../include/asio/detail/old_win_sdk_compat.hpp | 214 +
.../include/asio/detail/op_queue.hpp | 156 +
.../include/asio/detail/operation.hpp | 38 +
.../asio/detail/pipe_select_interrupter.hpp | 89 +
.../include/asio/detail/pop_options.hpp | 105 +
.../include/asio/detail/posix_event.hpp | 126 +
.../asio/detail/posix_fd_set_adapter.hpp | 118 +
.../include/asio/detail/posix_mutex.hpp | 76 +
.../asio/detail/posix_signal_blocker.hpp | 85 +
.../include/asio/detail/posix_static_mutex.hpp | 64 +
.../include/asio/detail/posix_thread.hpp | 105 +
.../include/asio/detail/posix_tss_ptr.hpp | 79 +
.../include/asio/detail/push_options.hpp | 138 +
.../asio/detail/reactive_descriptor_service.hpp | 322 +
.../asio/detail/reactive_null_buffers_op.hpp | 88 +
.../detail/reactive_serial_port_service.hpp | 234 +
.../asio/detail/reactive_socket_accept_op.hpp | 136 +
.../asio/detail/reactive_socket_connect_op.hpp | 106 +
.../asio/detail/reactive_socket_recv_op.hpp | 123 +
.../asio/detail/reactive_socket_recvfrom_op.hpp | 133 +
.../asio/detail/reactive_socket_recvmsg_op.hpp | 125 +
.../asio/detail/reactive_socket_send_op.hpp | 120 +
.../asio/detail/reactive_socket_sendto_op.hpp | 123 +
.../asio/detail/reactive_socket_service.hpp | 457 +
.../detail/reactive_socket_service_base.hpp | 450 +
.../asio-1.10.2/include/asio/detail/reactor.hpp | 32 +
.../include/asio/detail/reactor_fwd.hpp | 40 +
.../include/asio/detail/reactor_op.hpp | 61 +
.../include/asio/detail/reactor_op_queue.hpp | 168 +
.../include/asio/detail/regex_fwd.hpp | 35 +
.../include/asio/detail/resolve_endpoint_op.hpp | 121 +
.../include/asio/detail/resolve_op.hpp | 131 +
.../include/asio/detail/resolver_service.hpp | 129 +
.../asio/detail/resolver_service_base.hpp | 129 +
.../include/asio/detail/scoped_lock.hpp | 101 +
.../include/asio/detail/scoped_ptr.hpp | 79 +
.../include/asio/detail/select_interrupter.hpp | 46 +
.../include/asio/detail/select_reactor.hpp | 219 +
.../include/asio/detail/service_registry.hpp | 156 +
.../include/asio/detail/shared_ptr.hpp | 38 +
.../include/asio/detail/signal_blocker.hpp | 44 +
.../include/asio/detail/signal_handler.hpp | 82 +
.../include/asio/detail/signal_init.hpp | 47 +
.../include/asio/detail/signal_op.hpp | 49 +
.../include/asio/detail/signal_set_service.hpp | 216 +
.../include/asio/detail/socket_holder.hpp | 98 +
.../include/asio/detail/socket_ops.hpp | 334 +
.../include/asio/detail/socket_option.hpp | 316 +
.../asio/detail/socket_select_interrupter.hpp | 91 +
.../include/asio/detail/socket_types.hpp | 404 +
.../asio/detail/solaris_fenced_block.hpp | 61 +
.../include/asio/detail/static_mutex.hpp | 52 +
.../include/asio/detail/std_event.hpp | 176 +
.../include/asio/detail/std_mutex.hpp | 73 +
.../include/asio/detail/std_static_mutex.hpp | 81 +
.../include/asio/detail/std_thread.hpp | 65 +
.../include/asio/detail/strand_service.hpp | 142 +
.../include/asio/detail/task_io_service.hpp | 201 +
.../asio/detail/task_io_service_operation.hpp | 76 +
.../asio/detail/task_io_service_thread_info.hpp | 40 +
.../asio-1.10.2/include/asio/detail/thread.hpp | 56 +
.../include/asio/detail/thread_info_base.hpp | 91 +
.../include/asio/detail/throw_error.hpp | 53 +
.../include/asio/detail/throw_exception.hpp | 51 +
.../include/asio/detail/timer_queue.hpp | 332 +
.../include/asio/detail/timer_queue_base.hpp | 68 +
.../include/asio/detail/timer_queue_ptime.hpp | 93 +
.../include/asio/detail/timer_queue_set.hpp | 66 +
.../include/asio/detail/timer_scheduler.hpp | 35 +
.../include/asio/detail/timer_scheduler_fwd.hpp | 40 +
.../asio-1.10.2/include/asio/detail/tss_ptr.hpp | 69 +
.../include/asio/detail/type_traits.hpp | 58 +
.../include/asio/detail/variadic_templates.hpp | 63 +
.../include/asio/detail/wait_handler.hpp | 83 +
.../asio-1.10.2/include/asio/detail/wait_op.hpp | 45 +
.../include/asio/detail/weak_ptr.hpp | 38 +
.../include/asio/detail/win_event.hpp | 126 +
.../include/asio/detail/win_fd_set_adapter.hpp | 149 +
.../include/asio/detail/win_fenced_block.hpp | 89 +
.../asio/detail/win_iocp_handle_read_op.hpp | 109 +
.../asio/detail/win_iocp_handle_service.hpp | 322 +
.../asio/detail/win_iocp_handle_write_op.hpp | 101 +
.../include/asio/detail/win_iocp_io_service.hpp | 315 +
.../asio/detail/win_iocp_null_buffers_op.hpp | 119 +
.../include/asio/detail/win_iocp_operation.hpp | 95 +
.../asio/detail/win_iocp_overlapped_op.hpp | 88 +
.../asio/detail/win_iocp_overlapped_ptr.hpp | 144 +
.../detail/win_iocp_serial_port_service.hpp | 228 +
.../asio/detail/win_iocp_socket_accept_op.hpp | 165 +
.../asio/detail/win_iocp_socket_connect_op.hpp | 124 +
.../asio/detail/win_iocp_socket_recv_op.hpp | 115 +
.../asio/detail/win_iocp_socket_recvfrom_op.hpp | 123 +
.../asio/detail/win_iocp_socket_recvmsg_op.hpp | 116 +
.../asio/detail/win_iocp_socket_send_op.hpp | 109 +
.../asio/detail/win_iocp_socket_service.hpp | 525 +
.../detail/win_iocp_socket_service_base.hpp | 524 +
.../asio/detail/win_iocp_thread_info.hpp | 34 +
.../include/asio/detail/win_mutex.hpp | 78 +
.../asio/detail/win_object_handle_service.hpp | 183 +
.../include/asio/detail/win_static_mutex.hpp | 74 +
.../include/asio/detail/win_thread.hpp | 139 +
.../include/asio/detail/win_tss_ptr.hpp | 79 +
.../include/asio/detail/wince_thread.hpp | 116 +
.../include/asio/detail/winrt_async_manager.hpp | 294 +
.../include/asio/detail/winrt_async_op.hpp | 65 +
.../include/asio/detail/winrt_resolve_op.hpp | 117 +
.../asio/detail/winrt_resolver_service.hpp | 183 +
.../asio/detail/winrt_socket_connect_op.hpp | 90 +
.../asio/detail/winrt_socket_recv_op.hpp | 110 +
.../asio/detail/winrt_socket_send_op.hpp | 101 +
.../asio/detail/winrt_ssocket_service.hpp | 232 +
.../asio/detail/winrt_ssocket_service_base.hpp | 355 +
.../asio/detail/winrt_timer_scheduler.hpp | 131 +
.../include/asio/detail/winrt_utils.hpp | 106 +
.../include/asio/detail/winsock_init.hpp | 128 +
.../include/asio/detail/wrapped_handler.hpp | 291 +
.../asio-1.10.2/include/asio/error.hpp | 331 +
.../asio-1.10.2/include/asio/error_code.hpp | 188 +
.../include/asio/generic/basic_endpoint.hpp | 193 +
.../include/asio/generic/datagram_protocol.hpp | 123 +
.../include/asio/generic/detail/endpoint.hpp | 133 +
.../asio/generic/detail/impl/endpoint.ipp | 109 +
.../include/asio/generic/raw_protocol.hpp | 121 +
.../asio/generic/seq_packet_protocol.hpp | 122 +
.../include/asio/generic/stream_protocol.hpp | 127 +
.../include/asio/handler_alloc_hook.hpp | 81 +
.../include/asio/handler_continuation_hook.hpp | 54 +
.../include/asio/handler_invoke_hook.hpp | 85 +
.../asio-1.10.2/include/asio/handler_type.hpp | 112 +
.../include/asio/high_resolution_timer.hpp | 63 +
.../include/asio/impl/buffered_read_stream.hpp | 358 +
.../include/asio/impl/buffered_write_stream.hpp | 338 +
.../asio-1.10.2/include/asio/impl/connect.hpp | 428 +
.../asio-1.10.2/include/asio/impl/error.ipp | 128 +
.../include/asio/impl/error_code.ipp | 128 +
.../include/asio/impl/handler_alloc_hook.ipp | 77 +
.../include/asio/impl/io_service.hpp | 152 +
.../include/asio/impl/io_service.ipp | 155 +
.../asio-1.10.2/include/asio/impl/read.hpp | 753 +
.../asio-1.10.2/include/asio/impl/read_at.hpp | 810 +
.../include/asio/impl/read_until.hpp | 1147 +
.../include/asio/impl/serial_port_base.hpp | 59 +
.../include/asio/impl/serial_port_base.ipp | 554 +
.../asio-1.10.2/include/asio/impl/spawn.hpp | 336 +
.../asio-1.10.2/include/asio/impl/src.cpp | 25 +
.../asio-1.10.2/include/asio/impl/src.hpp | 74 +
.../include/asio/impl/use_future.hpp | 172 +
.../asio-1.10.2/include/asio/impl/write.hpp | 765 +
.../asio-1.10.2/include/asio/impl/write_at.hpp | 825 +
.../asio-1.10.2/include/asio/io_service.hpp | 770 +
.../asio-1.10.2/include/asio/ip/address.hpp | 200 +
.../asio-1.10.2/include/asio/ip/address_v4.hpp | 241 +
.../asio-1.10.2/include/asio/ip/address_v6.hpp | 246 +
.../include/asio/ip/basic_endpoint.hpp | 263 +
.../include/asio/ip/basic_resolver.hpp | 268 +
.../include/asio/ip/basic_resolver_entry.hpp | 94 +
.../include/asio/ip/basic_resolver_iterator.hpp | 260 +
.../include/asio/ip/basic_resolver_query.hpp | 244 +
.../include/asio/ip/detail/endpoint.hpp | 139 +
.../include/asio/ip/detail/impl/endpoint.ipp | 204 +
.../include/asio/ip/detail/socket_option.hpp | 569 +
.../asio-1.10.2/include/asio/ip/host_name.hpp | 42 +
.../asio-1.10.2/include/asio/ip/icmp.hpp | 115 +
.../include/asio/ip/impl/address.hpp | 53 +
.../include/asio/ip/impl/address.ipp | 226 +
.../include/asio/ip/impl/address_v4.hpp | 53 +
.../include/asio/ip/impl/address_v4.ipp | 178 +
.../include/asio/ip/impl/address_v6.hpp | 53 +
.../include/asio/ip/impl/address_v6.ipp | 298 +
.../include/asio/ip/impl/basic_endpoint.hpp | 55 +
.../include/asio/ip/impl/host_name.ipp | 54 +
.../asio-1.10.2/include/asio/ip/multicast.hpp | 191 +
.../include/asio/ip/resolver_query_base.hpp | 130 +
.../include/asio/ip/resolver_service.hpp | 176 +
.../asio-1.10.2/include/asio/ip/tcp.hpp | 155 +
.../asio-1.10.2/include/asio/ip/udp.hpp | 111 +
.../asio-1.10.2/include/asio/ip/unicast.hpp | 70 +
.../asio-1.10.2/include/asio/ip/v6_only.hpp | 69 +
.../include/asio/is_read_buffered.hpp | 59 +
.../include/asio/is_write_buffered.hpp | 59 +
.../include/asio/local/basic_endpoint.hpp | 239 +
.../include/asio/local/connect_pair.hpp | 104 +
.../include/asio/local/datagram_protocol.hpp | 80 +
.../include/asio/local/detail/endpoint.hpp | 133 +
.../include/asio/local/detail/impl/endpoint.ipp | 128 +
.../include/asio/local/stream_protocol.hpp | 90 +
.../asio-1.10.2/include/asio/placeholders.hpp | 123 +
.../include/asio/posix/basic_descriptor.hpp | 490 +
.../asio/posix/basic_stream_descriptor.hpp | 362 +
.../include/asio/posix/descriptor_base.hpp | 97 +
.../include/asio/posix/stream_descriptor.hpp | 37 +
.../asio/posix/stream_descriptor_service.hpp | 260 +
.../include/asio/raw_socket_service.hpp | 432 +
.../asio-1.10.2/include/asio/read.hpp | 631 +
.../asio-1.10.2/include/asio/read_at.hpp | 664 +
.../asio-1.10.2/include/asio/read_until.hpp | 923 +
.../include/asio/seq_packet_socket_service.hpp | 380 +
.../asio-1.10.2/include/asio/serial_port.hpp | 36 +
.../include/asio/serial_port_base.hpp | 167 +
.../include/asio/serial_port_service.hpp | 253 +
.../asio-1.10.2/include/asio/signal_set.hpp | 28 +
.../include/asio/signal_set_service.hpp | 134 +
.../include/asio/socket_acceptor_service.hpp | 302 +
.../asio-1.10.2/include/asio/socket_base.hpp | 520 +
.../asio-1.10.2/include/asio/spawn.hpp | 265 +
.../asio-1.10.2/include/asio/ssl.hpp | 30 +
.../include/asio/ssl/basic_context.hpp | 40 +
.../asio-1.10.2/include/asio/ssl/context.hpp | 787 +
.../include/asio/ssl/context_base.hpp | 167 +
.../include/asio/ssl/context_service.hpp | 40 +
.../asio/ssl/detail/buffered_handshake_op.hpp | 110 +
.../include/asio/ssl/detail/engine.hpp | 164 +
.../include/asio/ssl/detail/handshake_op.hpp | 68 +
.../include/asio/ssl/detail/impl/engine.ipp | 326 +
.../asio/ssl/detail/impl/openssl_init.ipp | 145 +
.../asio-1.10.2/include/asio/ssl/detail/io.hpp | 347 +
.../include/asio/ssl/detail/openssl_init.hpp | 101 +
.../include/asio/ssl/detail/openssl_types.hpp | 28 +
.../asio/ssl/detail/password_callback.hpp | 72 +
.../include/asio/ssl/detail/read_op.hpp | 73 +
.../include/asio/ssl/detail/shutdown_op.hpp | 60 +
.../include/asio/ssl/detail/stream_core.hpp | 126 +
.../include/asio/ssl/detail/verify_callback.hpp | 68 +
.../include/asio/ssl/detail/write_op.hpp | 73 +
.../asio-1.10.2/include/asio/ssl/error.hpp | 68 +
.../include/asio/ssl/impl/context.hpp | 71 +
.../include/asio/ssl/impl/context.ipp | 950 +
.../asio-1.10.2/include/asio/ssl/impl/error.ipp | 57 +
.../asio/ssl/impl/rfc2818_verification.ipp | 166 +
.../asio-1.10.2/include/asio/ssl/impl/src.hpp | 28 +
.../include/asio/ssl/old/basic_context.hpp | 434 +
.../include/asio/ssl/old/context_service.hpp | 174 +
.../ssl/old/detail/openssl_context_service.hpp | 386 +
.../asio/ssl/old/detail/openssl_operation.hpp | 524 +
.../ssl/old/detail/openssl_stream_service.hpp | 571 +
.../asio-1.10.2/include/asio/ssl/old/stream.hpp | 501 +
.../include/asio/ssl/old/stream_service.hpp | 184 +
.../include/asio/ssl/rfc2818_verification.hpp | 100 +
.../asio-1.10.2/include/asio/ssl/stream.hpp | 756 +
.../include/asio/ssl/stream_base.hpp | 52 +
.../include/asio/ssl/stream_service.hpp | 40 +
.../include/asio/ssl/verify_context.hpp | 73 +
.../include/asio/ssl/verify_mode.hpp | 63 +
.../asio-1.10.2/include/asio/steady_timer.hpp | 61 +
.../asio-1.10.2/include/asio/strand.hpp | 251 +
.../include/asio/stream_socket_service.hpp | 376 +
.../asio-1.10.2/include/asio/streambuf.hpp | 33 +
.../asio-1.10.2/include/asio/system_error.hpp | 131 +
.../asio-1.10.2/include/asio/system_timer.hpp | 57 +
.../asio-1.10.2/include/asio/thread.hpp | 92 +
.../asio-1.10.2/include/asio/time_traits.hpp | 88 +
.../asio-1.10.2/include/asio/unyield.hpp | 21 +
.../asio-1.10.2/include/asio/use_future.hpp | 92 +
.../asio-1.10.2/include/asio/version.hpp | 23 +
.../asio-1.10.2/include/asio/wait_traits.hpp | 41 +
.../include/asio/waitable_timer_service.hpp | 168 +
.../include/asio/windows/basic_handle.hpp | 281 +
.../asio/windows/basic_object_handle.hpp | 178 +
.../asio/windows/basic_random_access_handle.hpp | 376 +
.../asio/windows/basic_stream_handle.hpp | 359 +
.../include/asio/windows/object_handle.hpp | 38 +
.../asio/windows/object_handle_service.hpp | 177 +
.../include/asio/windows/overlapped_ptr.hpp | 116 +
.../asio/windows/random_access_handle.hpp | 37 +
.../windows/random_access_handle_service.hpp | 220 +
.../include/asio/windows/stream_handle.hpp | 37 +
.../asio/windows/stream_handle_service.hpp | 218 +
.../asio-1.10.2/include/asio/write.hpp | 618 +
.../asio-1.10.2/include/asio/write_at.hpp | 670 +
.../asio-1.10.2/include/asio/yield.hpp | 23 +
.../third_party/asio-1.10.2/src/asio.cpp | 11 +
.../third_party/asio-1.10.2/src/asio_ssl.cpp | 11 +
.../third_party/gmock-1.7.0/CMakeLists.txt | 2 +
.../libhdfspp/third_party/gmock-1.7.0/LICENSE | 28 +
.../third_party/gmock-1.7.0/gmock-gtest-all.cc | 11443 ++++++++++
.../third_party/gmock-1.7.0/gmock/gmock.h | 14198 ++++++++++++
.../third_party/gmock-1.7.0/gmock_main.cc | 54 +
.../third_party/gmock-1.7.0/gtest/gtest.h | 20061 +++++++++++++++++
417 files changed, 132853 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hadoop/blob/5b488f3e/hadoop-hdfs-project/hadoop-hdfs-client/src/main/native/CMakeLists.txt
----------------------------------------------------------------------
diff --git a/hadoop-hdfs-project/hadoop-hdfs-client/src/main/native/CMakeLists.txt b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/native/CMakeLists.txt
index 86f8abc..ef14183 100644
--- a/hadoop-hdfs-project/hadoop-hdfs-client/src/main/native/CMakeLists.txt
+++ b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/native/CMakeLists.txt
@@ -17,3 +17,5 @@
#
cmake_minimum_required(VERSION 2.8 FATAL_ERROR)
+
+add_subdirectory(libhdfspp)
http://git-wip-us.apache.org/repos/asf/hadoop/blob/5b488f3e/hadoop-hdfs-project/hadoop-hdfs-client/src/main/native/libhdfspp/CMakeLists.txt
----------------------------------------------------------------------
diff --git a/hadoop-hdfs-project/hadoop-hdfs-client/src/main/native/libhdfspp/CMakeLists.txt b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/native/libhdfspp/CMakeLists.txt
new file mode 100644
index 0000000..96bbaed
--- /dev/null
+++ b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/native/libhdfspp/CMakeLists.txt
@@ -0,0 +1,35 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+project (libhdfspp)
+
+add_definitions(-DASIO_STANDALONE)
+
+if(UNIX)
+set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -pedantic -std=c++11 -g -fPIC -fno-strict-aliasing")
+endif()
+
+# Mac OS 10.7 and later deprecates most of the methods in OpenSSL.
+# Add -Wno-deprecated-declarations to avoid the warnings.
+if(APPLE)
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++ -Wno-deprecated-declarations")
+endif()
+
+include_directories(third_party/gmock-1.7.0)
+
+add_subdirectory(third_party/gmock-1.7.0)
http://git-wip-us.apache.org/repos/asf/hadoop/blob/5b488f3e/hadoop-hdfs-project/hadoop-hdfs-client/src/main/native/libhdfspp/third_party/asio-1.10.2/COPYING
----------------------------------------------------------------------
diff --git a/hadoop-hdfs-project/hadoop-hdfs-client/src/main/native/libhdfspp/third_party/asio-1.10.2/COPYING b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/native/libhdfspp/third_party/asio-1.10.2/COPYING
new file mode 100644
index 0000000..e86a381
--- /dev/null
+++ b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/native/libhdfspp/third_party/asio-1.10.2/COPYING
@@ -0,0 +1,4 @@
+Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+
+Distributed under the Boost Software License, Version 1.0. (See accompanying
+file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
http://git-wip-us.apache.org/repos/asf/hadoop/blob/5b488f3e/hadoop-hdfs-project/hadoop-hdfs-client/src/main/native/libhdfspp/third_party/asio-1.10.2/include/asio.hpp
----------------------------------------------------------------------
diff --git a/hadoop-hdfs-project/hadoop-hdfs-client/src/main/native/libhdfspp/third_party/asio-1.10.2/include/asio.hpp b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/native/libhdfspp/third_party/asio-1.10.2/include/asio.hpp
new file mode 100644
index 0000000..1f47840
--- /dev/null
+++ b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/native/libhdfspp/third_party/asio-1.10.2/include/asio.hpp
@@ -0,0 +1,122 @@
+//
+// asio.hpp
+// ~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef ASIO_HPP
+#define ASIO_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include "asio/async_result.hpp"
+#include "asio/basic_datagram_socket.hpp"
+#include "asio/basic_deadline_timer.hpp"
+#include "asio/basic_io_object.hpp"
+#include "asio/basic_raw_socket.hpp"
+#include "asio/basic_seq_packet_socket.hpp"
+#include "asio/basic_serial_port.hpp"
+#include "asio/basic_signal_set.hpp"
+#include "asio/basic_socket_acceptor.hpp"
+#include "asio/basic_socket_iostream.hpp"
+#include "asio/basic_socket_streambuf.hpp"
+#include "asio/basic_stream_socket.hpp"
+#include "asio/basic_streambuf.hpp"
+#include "asio/basic_waitable_timer.hpp"
+#include "asio/buffer.hpp"
+#include "asio/buffered_read_stream_fwd.hpp"
+#include "asio/buffered_read_stream.hpp"
+#include "asio/buffered_stream_fwd.hpp"
+#include "asio/buffered_stream.hpp"
+#include "asio/buffered_write_stream_fwd.hpp"
+#include "asio/buffered_write_stream.hpp"
+#include "asio/buffers_iterator.hpp"
+#include "asio/completion_condition.hpp"
+#include "asio/connect.hpp"
+#include "asio/coroutine.hpp"
+#include "asio/datagram_socket_service.hpp"
+#include "asio/deadline_timer_service.hpp"
+#include "asio/deadline_timer.hpp"
+#include "asio/error.hpp"
+#include "asio/error_code.hpp"
+#include "asio/generic/basic_endpoint.hpp"
+#include "asio/generic/datagram_protocol.hpp"
+#include "asio/generic/raw_protocol.hpp"
+#include "asio/generic/seq_packet_protocol.hpp"
+#include "asio/generic/stream_protocol.hpp"
+#include "asio/handler_alloc_hook.hpp"
+#include "asio/handler_continuation_hook.hpp"
+#include "asio/handler_invoke_hook.hpp"
+#include "asio/handler_type.hpp"
+#include "asio/io_service.hpp"
+#include "asio/ip/address.hpp"
+#include "asio/ip/address_v4.hpp"
+#include "asio/ip/address_v6.hpp"
+#include "asio/ip/basic_endpoint.hpp"
+#include "asio/ip/basic_resolver.hpp"
+#include "asio/ip/basic_resolver_entry.hpp"
+#include "asio/ip/basic_resolver_iterator.hpp"
+#include "asio/ip/basic_resolver_query.hpp"
+#include "asio/ip/host_name.hpp"
+#include "asio/ip/icmp.hpp"
+#include "asio/ip/multicast.hpp"
+#include "asio/ip/resolver_query_base.hpp"
+#include "asio/ip/resolver_service.hpp"
+#include "asio/ip/tcp.hpp"
+#include "asio/ip/udp.hpp"
+#include "asio/ip/unicast.hpp"
+#include "asio/ip/v6_only.hpp"
+#include "asio/is_read_buffered.hpp"
+#include "asio/is_write_buffered.hpp"
+#include "asio/local/basic_endpoint.hpp"
+#include "asio/local/connect_pair.hpp"
+#include "asio/local/datagram_protocol.hpp"
+#include "asio/local/stream_protocol.hpp"
+#include "asio/placeholders.hpp"
+#include "asio/posix/basic_descriptor.hpp"
+#include "asio/posix/basic_stream_descriptor.hpp"
+#include "asio/posix/descriptor_base.hpp"
+#include "asio/posix/stream_descriptor.hpp"
+#include "asio/posix/stream_descriptor_service.hpp"
+#include "asio/raw_socket_service.hpp"
+#include "asio/read.hpp"
+#include "asio/read_at.hpp"
+#include "asio/read_until.hpp"
+#include "asio/seq_packet_socket_service.hpp"
+#include "asio/serial_port.hpp"
+#include "asio/serial_port_base.hpp"
+#include "asio/serial_port_service.hpp"
+#include "asio/signal_set.hpp"
+#include "asio/signal_set_service.hpp"
+#include "asio/socket_acceptor_service.hpp"
+#include "asio/socket_base.hpp"
+#include "asio/strand.hpp"
+#include "asio/stream_socket_service.hpp"
+#include "asio/streambuf.hpp"
+#include "asio/system_error.hpp"
+#include "asio/thread.hpp"
+#include "asio/time_traits.hpp"
+#include "asio/version.hpp"
+#include "asio/wait_traits.hpp"
+#include "asio/waitable_timer_service.hpp"
+#include "asio/windows/basic_handle.hpp"
+#include "asio/windows/basic_object_handle.hpp"
+#include "asio/windows/basic_random_access_handle.hpp"
+#include "asio/windows/basic_stream_handle.hpp"
+#include "asio/windows/object_handle.hpp"
+#include "asio/windows/object_handle_service.hpp"
+#include "asio/windows/overlapped_ptr.hpp"
+#include "asio/windows/random_access_handle.hpp"
+#include "asio/windows/random_access_handle_service.hpp"
+#include "asio/windows/stream_handle.hpp"
+#include "asio/windows/stream_handle_service.hpp"
+#include "asio/write.hpp"
+#include "asio/write_at.hpp"
+
+#endif // ASIO_HPP
http://git-wip-us.apache.org/repos/asf/hadoop/blob/5b488f3e/hadoop-hdfs-project/hadoop-hdfs-client/src/main/native/libhdfspp/third_party/asio-1.10.2/include/asio/async_result.hpp
----------------------------------------------------------------------
diff --git a/hadoop-hdfs-project/hadoop-hdfs-client/src/main/native/libhdfspp/third_party/asio-1.10.2/include/asio/async_result.hpp b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/native/libhdfspp/third_party/asio-1.10.2/include/asio/async_result.hpp
new file mode 100644
index 0000000..b98d770
--- /dev/null
+++ b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/native/libhdfspp/third_party/asio-1.10.2/include/asio/async_result.hpp
@@ -0,0 +1,94 @@
+//
+// async_result.hpp
+// ~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef ASIO_ASYNC_RESULT_HPP
+#define ASIO_ASYNC_RESULT_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include "asio/detail/config.hpp"
+#include "asio/handler_type.hpp"
+
+#include "asio/detail/push_options.hpp"
+
+namespace asio {
+
+/// An interface for customising the behaviour of an initiating function.
+/**
+ * This template may be specialised for user-defined handler types.
+ */
+template <typename Handler>
+class async_result
+{
+public:
+ /// The return type of the initiating function.
+ typedef void type;
+
+ /// Construct an async result from a given handler.
+ /**
+ * When using a specalised async_result, the constructor has an opportunity
+ * to initialise some state associated with the handler, which is then
+ * returned from the initiating function.
+ */
+ explicit async_result(Handler&)
+ {
+ }
+
+ /// Obtain the value to be returned from the initiating function.
+ type get()
+ {
+ }
+};
+
+namespace detail {
+
+// Helper template to deduce the true type of a handler, capture a local copy
+// of the handler, and then create an async_result for the handler.
+template <typename Handler, typename Signature>
+struct async_result_init
+{
+ explicit async_result_init(ASIO_MOVE_ARG(Handler) orig_handler)
+ : handler(ASIO_MOVE_CAST(Handler)(orig_handler)),
+ result(handler)
+ {
+ }
+
+ typename handler_type<Handler, Signature>::type handler;
+ async_result<typename handler_type<Handler, Signature>::type> result;
+};
+
+template <typename Handler, typename Signature>
+struct async_result_type_helper
+{
+ typedef typename async_result<
+ typename handler_type<Handler, Signature>::type
+ >::type type;
+};
+
+} // namespace detail
+} // namespace asio
+
+#include "asio/detail/pop_options.hpp"
+
+#if defined(GENERATING_DOCUMENTATION)
+# define ASIO_INITFN_RESULT_TYPE(h, sig) \
+ void_or_deduced
+#elif defined(_MSC_VER) && (_MSC_VER < 1500)
+# define ASIO_INITFN_RESULT_TYPE(h, sig) \
+ typename ::asio::detail::async_result_type_helper<h, sig>::type
+#else
+# define ASIO_INITFN_RESULT_TYPE(h, sig) \
+ typename ::asio::async_result< \
+ typename ::asio::handler_type<h, sig>::type>::type
+#endif
+
+#endif // ASIO_ASYNC_RESULT_HPP
http://git-wip-us.apache.org/repos/asf/hadoop/blob/5b488f3e/hadoop-hdfs-project/hadoop-hdfs-client/src/main/native/libhdfspp/third_party/asio-1.10.2/include/asio/basic_datagram_socket.hpp
----------------------------------------------------------------------
diff --git a/hadoop-hdfs-project/hadoop-hdfs-client/src/main/native/libhdfspp/third_party/asio-1.10.2/include/asio/basic_datagram_socket.hpp b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/native/libhdfspp/third_party/asio-1.10.2/include/asio/basic_datagram_socket.hpp
new file mode 100644
index 0000000..a1356b9
--- /dev/null
+++ b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/native/libhdfspp/third_party/asio-1.10.2/include/asio/basic_datagram_socket.hpp
@@ -0,0 +1,949 @@
+//
+// basic_datagram_socket.hpp
+// ~~~~~~~~~~~~~~~~~~~~~~~~~
+//
+// Copyright (c) 2003-2014 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef ASIO_BASIC_DATAGRAM_SOCKET_HPP
+#define ASIO_BASIC_DATAGRAM_SOCKET_HPP
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+# pragma once
+#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
+
+#include "asio/detail/config.hpp"
+#include <cstddef>
+#include "asio/basic_socket.hpp"
+#include "asio/datagram_socket_service.hpp"
+#include "asio/detail/handler_type_requirements.hpp"
+#include "asio/detail/throw_error.hpp"
+#include "asio/detail/type_traits.hpp"
+#include "asio/error.hpp"
+
+#include "asio/detail/push_options.hpp"
+
+namespace asio {
+
+/// Provides datagram-oriented socket functionality.
+/**
+ * The basic_datagram_socket class template provides asynchronous and blocking
+ * datagram-oriented socket functionality.
+ *
+ * @par Thread Safety
+ * @e Distinct @e objects: Safe.@n
+ * @e Shared @e objects: Unsafe.
+ */
+template <typename Protocol,
+ typename DatagramSocketService = datagram_socket_service<Protocol> >
+class basic_datagram_socket
+ : public basic_socket<Protocol, DatagramSocketService>
+{
+public:
+ /// (Deprecated: Use native_handle_type.) The native representation of a
+ /// socket.
+ typedef typename DatagramSocketService::native_handle_type native_type;
+
+ /// The native representation of a socket.
+ typedef typename DatagramSocketService::native_handle_type native_handle_type;
+
+ /// The protocol type.
+ typedef Protocol protocol_type;
+
+ /// The endpoint type.
+ typedef typename Protocol::endpoint endpoint_type;
+
+ /// Construct a basic_datagram_socket without opening it.
+ /**
+ * This constructor creates a datagram socket without opening it. The open()
+ * function must be called before data can be sent or received on the socket.
+ *
+ * @param io_service The io_service object that the datagram socket will use
+ * to dispatch handlers for any asynchronous operations performed on the
+ * socket.
+ */
+ explicit basic_datagram_socket(asio::io_service& io_service)
+ : basic_socket<Protocol, DatagramSocketService>(io_service)
+ {
+ }
+
+ /// Construct and open a basic_datagram_socket.
+ /**
+ * This constructor creates and opens a datagram socket.
+ *
+ * @param io_service The io_service object that the datagram socket will use
+ * to dispatch handlers for any asynchronous operations performed on the
+ * socket.
+ *
+ * @param protocol An object specifying protocol parameters to be used.
+ *
+ * @throws asio::system_error Thrown on failure.
+ */
+ basic_datagram_socket(asio::io_service& io_service,
+ const protocol_type& protocol)
+ : basic_socket<Protocol, DatagramSocketService>(io_service, protocol)
+ {
+ }
+
+ /// Construct a basic_datagram_socket, opening it and binding it to the given
+ /// local endpoint.
+ /**
+ * This constructor creates a datagram socket and automatically opens it bound
+ * to the specified endpoint on the local machine. The protocol used is the
+ * protocol associated with the given endpoint.
+ *
+ * @param io_service The io_service object that the datagram socket will use
+ * to dispatch handlers for any asynchronous operations performed on the
+ * socket.
+ *
+ * @param endpoint An endpoint on the local machine to which the datagram
+ * socket will be bound.
+ *
+ * @throws asio::system_error Thrown on failure.
+ */
+ basic_datagram_socket(asio::io_service& io_service,
+ const endpoint_type& endpoint)
+ : basic_socket<Protocol, DatagramSocketService>(io_service, endpoint)
+ {
+ }
+
+ /// Construct a basic_datagram_socket on an existing native socket.
+ /**
+ * This constructor creates a datagram socket object to hold an existing
+ * native socket.
+ *
+ * @param io_service The io_service object that the datagram socket will use
+ * to dispatch handlers for any asynchronous operations performed on the
+ * socket.
+ *
+ * @param protocol An object specifying protocol parameters to be used.
+ *
+ * @param native_socket The new underlying socket implementation.
+ *
+ * @throws asio::system_error Thrown on failure.
+ */
+ basic_datagram_socket(asio::io_service& io_service,
+ const protocol_type& protocol, const native_handle_type& native_socket)
+ : basic_socket<Protocol, DatagramSocketService>(
+ io_service, protocol, native_socket)
+ {
+ }
+
+#if defined(ASIO_HAS_MOVE) || defined(GENERATING_DOCUMENTATION)
+ /// Move-construct a basic_datagram_socket from another.
+ /**
+ * This constructor moves a datagram socket from one object to another.
+ *
+ * @param other The other basic_datagram_socket object from which the move
+ * will occur.
+ *
+ * @note Following the move, the moved-from object is in the same state as if
+ * constructed using the @c basic_datagram_socket(io_service&) constructor.
+ */
+ basic_datagram_socket(basic_datagram_socket&& other)
+ : basic_socket<Protocol, DatagramSocketService>(
+ ASIO_MOVE_CAST(basic_datagram_socket)(other))
+ {
+ }
+
+ /// Move-assign a basic_datagram_socket from another.
+ /**
+ * This assignment operator moves a datagram socket from one object to
+ * another.
+ *
+ * @param other The other basic_datagram_socket object from which the move
+ * will occur.
+ *
+ * @note Following the move, the moved-from object is in the same state as if
+ * constructed using the @c basic_datagram_socket(io_service&) constructor.
+ */
+ basic_datagram_socket& operator=(basic_datagram_socket&& other)
+ {
+ basic_socket<Protocol, DatagramSocketService>::operator=(
+ ASIO_MOVE_CAST(basic_datagram_socket)(other));
+ return *this;
+ }
+
+ /// Move-construct a basic_datagram_socket from a socket of another protocol
+ /// type.
+ /**
+ * This constructor moves a datagram socket from one object to another.
+ *
+ * @param other The other basic_datagram_socket object from which the move
+ * will occur.
+ *
+ * @note Following the move, the moved-from object is in the same state as if
+ * constructed using the @c basic_datagram_socket(io_service&) constructor.
+ */
+ template <typename Protocol1, typename DatagramSocketService1>
+ basic_datagram_socket(
+ basic_datagram_socket<Protocol1, DatagramSocketService1>&& other,
+ typename enable_if<is_convertible<Protocol1, Protocol>::value>::type* = 0)
+ : basic_socket<Protocol, DatagramSocketService>(
+ ASIO_MOVE_CAST2(basic_datagram_socket<
+ Protocol1, DatagramSocketService1>)(other))
+ {
+ }
+
+ /// Move-assign a basic_datagram_socket from a socket of another protocol
+ /// type.
+ /**
+ * This assignment operator moves a datagram socket from one object to
+ * another.
+ *
+ * @param other The other basic_datagram_socket object from which the move
+ * will occur.
+ *
+ * @note Following the move, the moved-from object is in the same state as if
+ * constructed using the @c basic_datagram_socket(io_service&) constructor.
+ */
+ template <typename Protocol1, typename DatagramSocketService1>
+ typename enable_if<is_convertible<Protocol1, Protocol>::value,
+ basic_datagram_socket>::type& operator=(
+ basic_datagram_socket<Protocol1, DatagramSocketService1>&& other)
+ {
+ basic_socket<Protocol, DatagramSocketService>::operator=(
+ ASIO_MOVE_CAST2(basic_datagram_socket<
+ Protocol1, DatagramSocketService1>)(other));
+ return *this;
+ }
+#endif // defined(ASIO_HAS_MOVE) || defined(GENERATING_DOCUMENTATION)
+
+ /// Send some data on a connected socket.
+ /**
+ * This function is used to send data on the datagram socket. The function
+ * call will block until the data has been sent successfully or an error
+ * occurs.
+ *
+ * @param buffers One ore more data buffers to be sent on the socket.
+ *
+ * @returns The number of bytes sent.
+ *
+ * @throws asio::system_error Thrown on failure.
+ *
+ * @note The send operation can only be used with a connected socket. Use
+ * the send_to function to send data on an unconnected datagram socket.
+ *
+ * @par Example
+ * To send a single data buffer use the @ref buffer function as follows:
+ * @code socket.send(asio::buffer(data, size)); @endcode
+ * See the @ref buffer documentation for information on sending multiple
+ * buffers in one go, and how to use it with arrays, boost::array or
+ * std::vector.
+ */
+ template <typename ConstBufferSequence>
+ std::size_t send(const ConstBufferSequence& buffers)
+ {
+ asio::error_code ec;
+ std::size_t s = this->get_service().send(
+ this->get_implementation(), buffers, 0, ec);
+ asio::detail::throw_error(ec, "send");
+ return s;
+ }
+
+ /// Send some data on a connected socket.
+ /**
+ * This function is used to send data on the datagram socket. The function
+ * call will block until the data has been sent successfully or an error
+ * occurs.
+ *
+ * @param buffers One ore more data buffers to be sent on the socket.
+ *
+ * @param flags Flags specifying how the send call is to be made.
+ *
+ * @returns The number of bytes sent.
+ *
+ * @throws asio::system_error Thrown on failure.
+ *
+ * @note The send operation can only be used with a connected socket. Use
+ * the send_to function to send data on an unconnected datagram socket.
+ */
+ template <typename ConstBufferSequence>
+ std::size_t send(const ConstBufferSequence& buffers,
+ socket_base::message_flags flags)
+ {
+ asio::error_code ec;
+ std::size_t s = this->get_service().send(
+ this->get_implementation(), buffers, flags, ec);
+ asio::detail::throw_error(ec, "send");
+ return s;
+ }
+
+ /// Send some data on a connected socket.
+ /**
+ * This function is used to send data on the datagram socket. The function
+ * call will block until the data has been sent successfully or an error
+ * occurs.
+ *
+ * @param buffers One or more data buffers to be sent on the socket.
+ *
+ * @param flags Flags specifying how the send call is to be made.
+ *
+ * @param ec Set to indicate what error occurred, if any.
+ *
+ * @returns The number of bytes sent.
+ *
+ * @note The send operation can only be used with a connected socket. Use
+ * the send_to function to send data on an unconnected datagram socket.
+ */
+ template <typename ConstBufferSequence>
+ std::size_t send(const ConstBufferSequence& buffers,
+ socket_base::message_flags flags, asio::error_code& ec)
+ {
+ return this->get_service().send(
+ this->get_implementation(), buffers, flags, ec);
+ }
+
+ /// Start an asynchronous send on a connected socket.
+ /**
+ * This function is used to asynchronously send data on the datagram socket.
+ * The function call always returns immediately.
+ *
+ * @param buffers One or more data buffers to be sent on the socket. Although
+ * the buffers object may be copied as necessary, ownership of the underlying
+ * memory blocks is retained by the caller, which must guarantee that they
+ * remain valid until the handler is called.
+ *
+ * @param handler The handler to be called when the send operation completes.
+ * Copies will be made of the handler as required. The function signature of
+ * the handler must be:
+ * @code void handler(
+ * const asio::error_code& error, // Result of operation.
+ * std::size_t bytes_transferred // Number of bytes sent.
+ * ); @endcode
+ * Regardless of whether the asynchronous operation completes immediately or
+ * not, the handler will not be invoked from within this function. Invocation
+ * of the handler will be performed in a manner equivalent to using
+ * asio::io_service::post().
+ *
+ * @note The async_send operation can only be used with a connected socket.
+ * Use the async_send_to function to send data on an unconnected datagram
+ * socket.
+ *
+ * @par Example
+ * To send a single data buffer use the @ref buffer function as follows:
+ * @code
+ * socket.async_send(asio::buffer(data, size), handler);
+ * @endcode
+ * See the @ref buffer documentation for information on sending multiple
+ * buffers in one go, and how to use it with arrays, boost::array or
+ * std::vector.
+ */
+ template <typename ConstBufferSequence, typename WriteHandler>
+ ASIO_INITFN_RESULT_TYPE(WriteHandler,
+ void (asio::error_code, std::size_t))
+ async_send(const ConstBufferSequence& buffers,
+ ASIO_MOVE_ARG(WriteHandler) handler)
+ {
+ // If you get an error on the following line it means that your handler does
+ // not meet the documented type requirements for a WriteHandler.
+ ASIO_WRITE_HANDLER_CHECK(WriteHandler, handler) type_check;
+
+ return this->get_service().async_send(this->get_implementation(),
+ buffers, 0, ASIO_MOVE_CAST(WriteHandler)(handler));
+ }
+
+ /// Start an asynchronous send on a connected socket.
+ /**
+ * This function is used to asynchronously send data on the datagram socket.
+ * The function call always returns immediately.
+ *
+ * @param buffers One or more data buffers to be sent on the socket. Although
+ * the buffers object may be copied as necessary, ownership of the underlying
+ * memory blocks is retained by the caller, which must guarantee that they
+ * remain valid until the handler is called.
+ *
+ * @param flags Flags specifying how the send call is to be made.
+ *
+ * @param handler The handler to be called when the send operation completes.
+ * Copies will be made of the handler as required. The function signature of
+ * the handler must be:
+ * @code void handler(
+ * const asio::error_code& error, // Result of operation.
+ * std::size_t bytes_transferred // Number of bytes sent.
+ * ); @endcode
+ * Regardless of whether the asynchronous operation completes immediately or
+ * not, the handler will not be invoked from within this function. Invocation
+ * of the handler will be performed in a manner equivalent to using
+ * asio::io_service::post().
+ *
+ * @note The async_send operation can only be used with a connected socket.
+ * Use the async_send_to function to send data on an unconnected datagram
+ * socket.
+ */
+ template <typename ConstBufferSequence, typename WriteHandler>
+ ASIO_INITFN_RESULT_TYPE(WriteHandler,
+ void (asio::error_code, std::size_t))
+ async_send(const ConstBufferSequence& buffers,
+ socket_base::message_flags flags,
+ ASIO_MOVE_ARG(WriteHandler) handler)
+ {
+ // If you get an error on the following line it means that your handler does
+ // not meet the documented type requirements for a WriteHandler.
+ ASIO_WRITE_HANDLER_CHECK(WriteHandler, handler) type_check;
+
+ return this->get_service().async_send(this->get_implementation(),
+ buffers, flags, ASIO_MOVE_CAST(WriteHandler)(handler));
+ }
+
+ /// Send a datagram to the specified endpoint.
+ /**
+ * This function is used to send a datagram to the specified remote endpoint.
+ * The function call will block until the data has been sent successfully or
+ * an error occurs.
+ *
+ * @param buffers One or more data buffers to be sent to the remote endpoint.
+ *
+ * @param destination The remote endpoint to which the data will be sent.
+ *
+ * @returns The number of bytes sent.
+ *
+ * @throws asio::system_error Thrown on failure.
+ *
+ * @par Example
+ * To send a single data buffer use the @ref buffer function as follows:
+ * @code
+ * asio::ip::udp::endpoint destination(
+ * asio::ip::address::from_string("1.2.3.4"), 12345);
+ * socket.send_to(asio::buffer(data, size), destination);
+ * @endcode
+ * See the @ref buffer documentation for information on sending multiple
+ * buffers in one go, and how to use it with arrays, boost::array or
+ * std::vector.
+ */
+ template <typename ConstBufferSequence>
+ std::size_t send_to(const ConstBufferSequence& buffers,
+ const endpoint_type& destination)
+ {
+ asio::error_code ec;
+ std::size_t s = this->get_service().send_to(
+ this->get_implementation(), buffers, destination, 0, ec);
+ asio::detail::throw_error(ec, "send_to");
+ return s;
+ }
+
+ /// Send a datagram to the specified endpoint.
+ /**
+ * This function is used to send a datagram to the specified remote endpoint.
+ * The function call will block until the data has been sent successfully or
+ * an error occurs.
+ *
+ * @param buffers One or more data buffers to be sent to the remote endpoint.
+ *
+ * @param destination The remote endpoint to which the data will be sent.
+ *
+ * @param flags Flags specifying how the send call is to be made.
+ *
+ * @returns The number of bytes sent.
+ *
+ * @throws asio::system_error Thrown on failure.
+ */
+ template <typename ConstBufferSequence>
+ std::size_t send_to(const ConstBufferSequence& buffers,
+ const endpoint_type& destination, socket_base::message_flags flags)
+ {
+ asio::error_code ec;
+ std::size_t s = this->get_service().send_to(
+ this->get_implementation(), buffers, destination, flags, ec);
+ asio::detail::throw_error(ec, "send_to");
+ return s;
+ }
+
+ /// Send a datagram to the specified endpoint.
+ /**
+ * This function is used to send a datagram to the specified remote endpoint.
+ * The function call will block until the data has been sent successfully or
+ * an error occurs.
+ *
+ * @param buffers One or more data buffers to be sent to the remote endpoint.
+ *
+ * @param destination The remote endpoint to which the data will be sent.
+ *
+ * @param flags Flags specifying how the send call is to be made.
+ *
+ * @param ec Set to indicate what error occurred, if any.
+ *
+ * @returns The number of bytes sent.
+ */
+ template <typename ConstBufferSequence>
+ std::size_t send_to(const ConstBufferSequence& buffers,
+ const endpoint_type& destination, socket_base::message_flags flags,
+ asio::error_code& ec)
+ {
+ return this->get_service().send_to(this->get_implementation(),
+ buffers, destination, flags, ec);
+ }
+
+ /// Start an asynchronous send.
+ /**
+ * This function is used to asynchronously send a datagram to the specified
+ * remote endpoint. The function call always returns immediately.
+ *
+ * @param buffers One or more data buffers to be sent to the remote endpoint.
+ * Although the buffers object may be copied as necessary, ownership of the
+ * underlying memory blocks is retained by the caller, which must guarantee
+ * that they remain valid until the handler is called.
+ *
+ * @param destination The remote endpoint to which the data will be sent.
+ * Copies will be made of the endpoint as required.
+ *
+ * @param handler The handler to be called when the send operation completes.
+ * Copies will be made of the handler as required. The function signature of
+ * the handler must be:
+ * @code void handler(
+ * const asio::error_code& error, // Result of operation.
+ * std::size_t bytes_transferred // Number of bytes sent.
+ * ); @endcode
+ * Regardless of whether the asynchronous operation completes immediately or
+ * not, the handler will not be invoked from within this function. Invocation
+ * of the handler will be performed in a manner equivalent to using
+ * asio::io_service::post().
+ *
+ * @par Example
+ * To send a single data buffer use the @ref buffer function as follows:
+ * @code
+ * asio::ip::udp::endpoint destination(
+ * asio::ip::address::from_string("1.2.3.4"), 12345);
+ * socket.async_send_to(
+ * asio::buffer(data, size), destination, handler);
+ * @endcode
+ * See the @ref buffer documentation for information on sending multiple
+ * buffers in one go, and how to use it with arrays, boost::array or
+ * std::vector.
+ */
+ template <typename ConstBufferSequence, typename WriteHandler>
+ ASIO_INITFN_RESULT_TYPE(WriteHandler,
+ void (asio::error_code, std::size_t))
+ async_send_to(const ConstBufferSequence& buffers,
+ const endpoint_type& destination,
+ ASIO_MOVE_ARG(WriteHandler) handler)
+ {
+ // If you get an error on the following line it means that your handler does
+ // not meet the documented type requirements for a WriteHandler.
+ ASIO_WRITE_HANDLER_CHECK(WriteHandler, handler) type_check;
+
+ return this->get_service().async_send_to(
+ this->get_implementation(), buffers, destination, 0,
+ ASIO_MOVE_CAST(WriteHandler)(handler));
+ }
+
+ /// Start an asynchronous send.
+ /**
+ * This function is used to asynchronously send a datagram to the specified
+ * remote endpoint. The function call always returns immediately.
+ *
+ * @param buffers One or more data buffers to be sent to the remote endpoint.
+ * Although the buffers object may be copied as necessary, ownership of the
+ * underlying memory blocks is retained by the caller, which must guarantee
+ * that they remain valid until the handler is called.
+ *
+ * @param flags Flags specifying how the send call is to be made.
+ *
+ * @param destination The remote endpoint to which the data will be sent.
+ * Copies will be made of the endpoint as required.
+ *
+ * @param handler The handler to be called when the send operation completes.
+ * Copies will be made of the handler as required. The function signature of
+ * the handler must be:
+ * @code void handler(
+ * const asio::error_code& error, // Result of operation.
+ * std::size_t bytes_transferred // Number of bytes sent.
+ * ); @endcode
+ * Regardless of whether the asynchronous operation completes immediately or
+ * not, the handler will not be invoked from within this function. Invocation
+ * of the handler will be performed in a manner equivalent to using
+ * asio::io_service::post().
+ */
+ template <typename ConstBufferSequence, typename WriteHandler>
+ ASIO_INITFN_RESULT_TYPE(WriteHandler,
+ void (asio::error_code, std::size_t))
+ async_send_to(const ConstBufferSequence& buffers,
+ const endpoint_type& destination, socket_base::message_flags flags,
+ ASIO_MOVE_ARG(WriteHandler) handler)
+ {
+ // If you get an error on the following line it means that your handler does
+ // not meet the documented type requirements for a WriteHandler.
+ ASIO_WRITE_HANDLER_CHECK(WriteHandler, handler) type_check;
+
+ return this->get_service().async_send_to(
+ this->get_implementation(), buffers, destination, flags,
+ ASIO_MOVE_CAST(WriteHandler)(handler));
+ }
+
+ /// Receive some data on a connected socket.
+ /**
+ * This function is used to receive data on the datagram socket. The function
+ * call will block until data has been received successfully or an error
+ * occurs.
+ *
+ * @param buffers One or more buffers into which the data will be received.
+ *
+ * @returns The number of bytes received.
+ *
+ * @throws asio::system_error Thrown on failure.
+ *
+ * @note The receive operation can only be used with a connected socket. Use
+ * the receive_from function to receive data on an unconnected datagram
+ * socket.
+ *
+ * @par Example
+ * To receive into a single data buffer use the @ref buffer function as
+ * follows:
+ * @code socket.receive(asio::buffer(data, size)); @endcode
+ * See the @ref buffer documentation for information on receiving into
+ * multiple buffers in one go, and how to use it with arrays, boost::array or
+ * std::vector.
+ */
+ template <typename MutableBufferSequence>
+ std::size_t receive(const MutableBufferSequence& buffers)
+ {
+ asio::error_code ec;
+ std::size_t s = this->get_service().receive(
+ this->get_implementation(), buffers, 0, ec);
+ asio::detail::throw_error(ec, "receive");
+ return s;
+ }
+
+ /// Receive some data on a connected socket.
+ /**
+ * This function is used to receive data on the datagram socket. The function
+ * call will block until data has been received successfully or an error
+ * occurs.
+ *
+ * @param buffers One or more buffers into which the data will be received.
+ *
+ * @param flags Flags specifying how the receive call is to be made.
+ *
+ * @returns The number of bytes received.
+ *
+ * @throws asio::system_error Thrown on failure.
+ *
+ * @note The receive operation can only be used with a connected socket. Use
+ * the receive_from function to receive data on an unconnected datagram
+ * socket.
+ */
+ template <typename MutableBufferSequence>
+ std::size_t receive(const MutableBufferSequence& buffers,
+ socket_base::message_flags flags)
+ {
+ asio::error_code ec;
+ std::size_t s = this->get_service().receive(
+ this->get_implementation(), buffers, flags, ec);
+ asio::detail::throw_error(ec, "receive");
+ return s;
+ }
+
+ /// Receive some data on a connected socket.
+ /**
+ * This function is used to receive data on the datagram socket. The function
+ * call will block until data has been received successfully or an error
+ * occurs.
+ *
+ * @param buffers One or more buffers into which the data will be received.
+ *
+ * @param flags Flags specifying how the receive call is to be made.
+ *
+ * @param ec Set to indicate what error occurred, if any.
+ *
+ * @returns The number of bytes received.
+ *
+ * @note The receive operation can only be used with a connected socket. Use
+ * the receive_from function to receive data on an unconnected datagram
+ * socket.
+ */
+ template <typename MutableBufferSequence>
+ std::size_t receive(const MutableBufferSequence& buffers,
+ socket_base::message_flags flags, asio::error_code& ec)
+ {
+ return this->get_service().receive(
+ this->get_implementation(), buffers, flags, ec);
+ }
+
+ /// Start an asynchronous receive on a connected socket.
+ /**
+ * This function is used to asynchronously receive data from the datagram
+ * socket. The function call always returns immediately.
+ *
+ * @param buffers One or more buffers into which the data will be received.
+ * Although the buffers object may be copied as necessary, ownership of the
+ * underlying memory blocks is retained by the caller, which must guarantee
+ * that they remain valid until the handler is called.
+ *
+ * @param handler The handler to be called when the receive operation
+ * completes. Copies will be made of the handler as required. The function
+ * signature of the handler must be:
+ * @code void handler(
+ * const asio::error_code& error, // Result of operation.
+ * std::size_t bytes_transferred // Number of bytes received.
+ * ); @endcode
+ * Regardless of whether the asynchronous operation completes immediately or
+ * not, the handler will not be invoked from within this function. Invocation
+ * of the handler will be performed in a manner equivalent to using
+ * asio::io_service::post().
+ *
+ * @note The async_receive operation can only be used with a connected socket.
+ * Use the async_receive_from function to receive data on an unconnected
+ * datagram socket.
+ *
+ * @par Example
+ * To receive into a single data buffer use the @ref buffer function as
+ * follows:
+ * @code
+ * socket.async_receive(asio::buffer(data, size), handler);
+ * @endcode
+ * See the @ref buffer documentation for information on receiving into
+ * multiple buffers in one go, and how to use it with arrays, boost::array or
+ * std::vector.
+ */
+ template <typename MutableBufferSequence, typename ReadHandler>
+ ASIO_INITFN_RESULT_TYPE(ReadHandler,
+ void (asio::error_code, std::size_t))
+ async_receive(const MutableBufferSequence& buffers,
+ ASIO_MOVE_ARG(ReadHandler) handler)
+ {
+ // If you get an error on the following line it means that your handler does
+ // not meet the documented type requirements for a ReadHandler.
+ ASIO_READ_HANDLER_CHECK(ReadHandler, handler) type_check;
+
+ return this->get_service().async_receive(this->get_implementation(),
+ buffers, 0, ASIO_MOVE_CAST(ReadHandler)(handler));
+ }
+
+ /// Start an asynchronous receive on a connected socket.
+ /**
+ * This function is used to asynchronously receive data from the datagram
+ * socket. The function call always returns immediately.
+ *
+ * @param buffers One or more buffers into which the data will be received.
+ * Although the buffers object may be copied as necessary, ownership of the
+ * underlying memory blocks is retained by the caller, which must guarantee
+ * that they remain valid until the handler is called.
+ *
+ * @param flags Flags specifying how the receive call is to be made.
+ *
+ * @param handler The handler to be called when the receive operation
+ * completes. Copies will be made of the handler as required. The function
+ * signature of the handler must be:
+ * @code void handler(
+ * const asio::error_code& error, // Result of operation.
+ * std::size_t bytes_transferred // Number of bytes received.
+ * ); @endcode
+ * Regardless of whether the asynchronous operation completes immediately or
+ * not, the handler will not be invoked from within this function. Invocation
+ * of the handler will be performed in a manner equivalent to using
+ * asio::io_service::post().
+ *
+ * @note The async_receive operation can only be used with a connected socket.
+ * Use the async_receive_from function to receive data on an unconnected
+ * datagram socket.
+ */
+ template <typename MutableBufferSequence, typename ReadHandler>
+ ASIO_INITFN_RESULT_TYPE(ReadHandler,
+ void (asio::error_code, std::size_t))
+ async_receive(const MutableBufferSequence& buffers,
+ socket_base::message_flags flags,
+ ASIO_MOVE_ARG(ReadHandler) handler)
+ {
+ // If you get an error on the following line it means that your handler does
+ // not meet the documented type requirements for a ReadHandler.
+ ASIO_READ_HANDLER_CHECK(ReadHandler, handler) type_check;
+
+ return this->get_service().async_receive(this->get_implementation(),
+ buffers, flags, ASIO_MOVE_CAST(ReadHandler)(handler));
+ }
+
+ /// Receive a datagram with the endpoint of the sender.
+ /**
+ * This function is used to receive a datagram. The function call will block
+ * until data has been received successfully or an error occurs.
+ *
+ * @param buffers One or more buffers into which the data will be received.
+ *
+ * @param sender_endpoint An endpoint object that receives the endpoint of
+ * the remote sender of the datagram.
+ *
+ * @returns The number of bytes received.
+ *
+ * @throws asio::system_error Thrown on failure.
+ *
+ * @par Example
+ * To receive into a single data buffer use the @ref buffer function as
+ * follows:
+ * @code
+ * asio::ip::udp::endpoint sender_endpoint;
+ * socket.receive_from(
+ * asio::buffer(data, size), sender_endpoint);
+ * @endcode
+ * See the @ref buffer documentation for information on receiving into
+ * multiple buffers in one go, and how to use it with arrays, boost::array or
+ * std::vector.
+ */
+ template <typename MutableBufferSequence>
+ std::size_t receive_from(const MutableBufferSequence& buffers,
+ endpoint_type& sender_endpoint)
+ {
+ asio::error_code ec;
+ std::size_t s = this->get_service().receive_from(
+ this->get_implementation(), buffers, sender_endpoint, 0, ec);
+ asio::detail::throw_error(ec, "receive_from");
+ return s;
+ }
+
+ /// Receive a datagram with the endpoint of the sender.
+ /**
+ * This function is used to receive a datagram. The function call will block
+ * until data has been received successfully or an error occurs.
+ *
+ * @param buffers One or more buffers into which the data will be received.
+ *
+ * @param sender_endpoint An endpoint object that receives the endpoint of
+ * the remote sender of the datagram.
+ *
+ * @param flags Flags specifying how the receive call is to be made.
+ *
+ * @returns The number of bytes received.
+ *
+ * @throws asio::system_error Thrown on failure.
+ */
+ template <typename MutableBufferSequence>
+ std::size_t receive_from(const MutableBufferSequence& buffers,
+ endpoint_type& sender_endpoint, socket_base::message_flags flags)
+ {
+ asio::error_code ec;
+ std::size_t s = this->get_service().receive_from(
+ this->get_implementation(), buffers, sender_endpoint, flags, ec);
+ asio::detail::throw_error(ec, "receive_from");
+ return s;
+ }
+
+ /// Receive a datagram with the endpoint of the sender.
+ /**
+ * This function is used to receive a datagram. The function call will block
+ * until data has been received successfully or an error occurs.
+ *
+ * @param buffers One or more buffers into which the data will be received.
+ *
+ * @param sender_endpoint An endpoint object that receives the endpoint of
+ * the remote sender of the datagram.
+ *
+ * @param flags Flags specifying how the receive call is to be made.
+ *
+ * @param ec Set to indicate what error occurred, if any.
+ *
+ * @returns The number of bytes received.
+ */
+ template <typename MutableBufferSequence>
+ std::size_t receive_from(const MutableBufferSequence& buffers,
+ endpoint_type& sender_endpoint, socket_base::message_flags flags,
+ asio::error_code& ec)
+ {
+ return this->get_service().receive_from(this->get_implementation(),
+ buffers, sender_endpoint, flags, ec);
+ }
+
+ /// Start an asynchronous receive.
+ /**
+ * This function is used to asynchronously receive a datagram. The function
+ * call always returns immediately.
+ *
+ * @param buffers One or more buffers into which the data will be received.
+ * Although the buffers object may be copied as necessary, ownership of the
+ * underlying memory blocks is retained by the caller, which must guarantee
+ * that they remain valid until the handler is called.
+ *
+ * @param sender_endpoint An endpoint object that receives the endpoint of
+ * the remote sender of the datagram. Ownership of the sender_endpoint object
+ * is retained by the caller, which must guarantee that it is valid until the
+ * handler is called.
+ *
+ * @param handler The handler to be called when the receive operation
+ * completes. Copies will be made of the handler as required. The function
+ * signature of the handler must be:
+ * @code void handler(
+ * const asio::error_code& error, // Result of operation.
+ * std::size_t bytes_transferred // Number of bytes received.
+ * ); @endcode
+ * Regardless of whether the asynchronous operation completes immediately or
+ * not, the handler will not be invoked from within this function. Invocation
+ * of the handler will be performed in a manner equivalent to using
+ * asio::io_service::post().
+ *
+ * @par Example
+ * To receive into a single data buffer use the @ref buffer function as
+ * follows:
+ * @code socket.async_receive_from(
+ * asio::buffer(data, size), sender_endpoint, handler); @endcode
+ * See the @ref buffer documentation for information on receiving into
+ * multiple buffers in one go, and how to use it with arrays, boost::array or
+ * std::vector.
+ */
+ template <typename MutableBufferSequence, typename ReadHandler>
+ ASIO_INITFN_RESULT_TYPE(ReadHandler,
+ void (asio::error_code, std::size_t))
+ async_receive_from(const MutableBufferSequence& buffers,
+ endpoint_type& sender_endpoint,
+ ASIO_MOVE_ARG(ReadHandler) handler)
+ {
+ // If you get an error on the following line it means that your handler does
+ // not meet the documented type requirements for a ReadHandler.
+ ASIO_READ_HANDLER_CHECK(ReadHandler, handler) type_check;
+
+ return this->get_service().async_receive_from(
+ this->get_implementation(), buffers, sender_endpoint, 0,
+ ASIO_MOVE_CAST(ReadHandler)(handler));
+ }
+
+ /// Start an asynchronous receive.
+ /**
+ * This function is used to asynchronously receive a datagram. The function
+ * call always returns immediately.
+ *
+ * @param buffers One or more buffers into which the data will be received.
+ * Although the buffers object may be copied as necessary, ownership of the
+ * underlying memory blocks is retained by the caller, which must guarantee
+ * that they remain valid until the handler is called.
+ *
+ * @param sender_endpoint An endpoint object that receives the endpoint of
+ * the remote sender of the datagram. Ownership of the sender_endpoint object
+ * is retained by the caller, which must guarantee that it is valid until the
+ * handler is called.
+ *
+ * @param flags Flags specifying how the receive call is to be made.
+ *
+ * @param handler The handler to be called when the receive operation
+ * completes. Copies will be made of the handler as required. The function
+ * signature of the handler must be:
+ * @code void handler(
+ * const asio::error_code& error, // Result of operation.
+ * std::size_t bytes_transferred // Number of bytes received.
+ * ); @endcode
+ * Regardless of whether the asynchronous operation completes immediately or
+ * not, the handler will not be invoked from within this function. Invocation
+ * of the handler will be performed in a manner equivalent to using
+ * asio::io_service::post().
+ */
+ template <typename MutableBufferSequence, typename ReadHandler>
+ ASIO_INITFN_RESULT_TYPE(ReadHandler,
+ void (asio::error_code, std::size_t))
+ async_receive_from(const MutableBufferSequence& buffers,
+ endpoint_type& sender_endpoint, socket_base::message_flags flags,
+ ASIO_MOVE_ARG(ReadHandler) handler)
+ {
+ // If you get an error on the following line it means that your handler does
+ // not meet the documented type requirements for a ReadHandler.
+ ASIO_READ_HANDLER_CHECK(ReadHandler, handler) type_check;
+
+ return this->get_service().async_receive_from(
+ this->get_implementation(), buffers, sender_endpoint, flags,
+ ASIO_MOVE_CAST(ReadHandler)(handler));
+ }
+};
+
+} // namespace asio
+
+#include "asio/detail/pop_options.hpp"
+
+#endif // ASIO_BASIC_DATAGRAM_SOCKET_HPP