2 / Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
4 / Distributed under the Boost Software License, Version 1.0. (See accompanying
5 / file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
8 [section:examples Examples]
11 * [link boost_asio.examples.cpp03_examples C++03 Examples]: Illustrates the use of
12 Boost.Asio using only C++03 language and library features. Where necessary, the
13 examples make use of selected Boost C++ libraries.
15 * [link boost_asio.examples.cpp11_examples C++11 Examples]: Contains a limited set of
16 the C++03 Boost.Asio examples, updated to use only C++11 library and language
17 facilities. These examples do not make direct use of Boost C++ libraries.
20 [section:cpp03_examples C++03 Examples]
25 This example shows how to customise the allocation of memory associated with
26 asynchronous operations.
28 * [@boost_asio/example/cpp03/allocation/server.cpp]
33 This example demonstrates how to create reference counted buffers that can be
34 used with socket read and write operations.
36 * [@boost_asio/example/cpp03/buffers/reference_counted.cpp]
41 This example implements a chat server and client. The programs use a custom
42 protocol with a fixed length message header and variable length message body.
44 * [@boost_asio/example/cpp03/chat/chat_message.hpp]
45 * [@boost_asio/example/cpp03/chat/chat_client.cpp]
46 * [@boost_asio/example/cpp03/chat/chat_server.cpp]
48 The following POSIX-specific chat client demonstrates how to use the
49 [link boost_asio.reference.posix__stream_descriptor posix::stream_descriptor] class to
50 perform console input and output.
52 * [@boost_asio/example/cpp03/chat/posix_chat_client.cpp]
57 A collection of simple clients and servers, showing the use of both synchronous
58 and asynchronous operations.
60 * [@boost_asio/example/cpp03/echo/async_tcp_echo_server.cpp]
61 * [@boost_asio/example/cpp03/echo/async_udp_echo_server.cpp]
62 * [@boost_asio/example/cpp03/echo/blocking_tcp_echo_client.cpp]
63 * [@boost_asio/example/cpp03/echo/blocking_tcp_echo_server.cpp]
64 * [@boost_asio/example/cpp03/echo/blocking_udp_echo_client.cpp]
65 * [@boost_asio/example/cpp03/echo/blocking_udp_echo_server.cpp]
70 These POSIX-specific examples show how to use Boost.Asio in conjunction with the
71 `fork()` system call. The first example illustrates the steps required to start
74 * [@boost_asio/example/cpp03/fork/daemon.cpp]
76 The second example demonstrates how it is possible to fork a process from
77 within a completion handler.
79 * [@boost_asio/example/cpp03/fork/process_per_connection.cpp]
84 Example programs implementing simple HTTP 1.0 clients. These examples show how
85 to use the [link boost_asio.reference.read_until read_until] and [link
86 boost_asio.reference.async_read_until async_read_until] functions.
88 * [@boost_asio/example/cpp03/http/client/sync_client.cpp]
89 * [@boost_asio/example/cpp03/http/client/async_client.cpp]
94 This example illustrates the use of asio in a simple single-threaded server
95 implementation of HTTP 1.0. It demonstrates how to perform a clean shutdown by
96 cancelling all outstanding asynchronous operations.
98 * [@boost_asio/example/cpp03/http/server/connection.cpp]
99 * [@boost_asio/example/cpp03/http/server/connection.hpp]
100 * [@boost_asio/example/cpp03/http/server/connection_manager.cpp]
101 * [@boost_asio/example/cpp03/http/server/connection_manager.hpp]
102 * [@boost_asio/example/cpp03/http/server/header.hpp]
103 * [@boost_asio/example/cpp03/http/server/main.cpp]
104 * [@boost_asio/example/cpp03/http/server/mime_types.cpp]
105 * [@boost_asio/example/cpp03/http/server/mime_types.hpp]
106 * [@boost_asio/example/cpp03/http/server/reply.cpp]
107 * [@boost_asio/example/cpp03/http/server/reply.hpp]
108 * [@boost_asio/example/cpp03/http/server/request.hpp]
109 * [@boost_asio/example/cpp03/http/server/request_handler.cpp]
110 * [@boost_asio/example/cpp03/http/server/request_handler.hpp]
111 * [@boost_asio/example/cpp03/http/server/request_parser.cpp]
112 * [@boost_asio/example/cpp03/http/server/request_parser.hpp]
113 * [@boost_asio/example/cpp03/http/server/server.cpp]
114 * [@boost_asio/example/cpp03/http/server/server.hpp]
117 [heading HTTP Server 2]
119 An HTTP server using an io_service-per-CPU design.
121 * [@boost_asio/example/cpp03/http/server2/connection.cpp]
122 * [@boost_asio/example/cpp03/http/server2/connection.hpp]
123 * [@boost_asio/example/cpp03/http/server2/header.hpp]
124 * [@boost_asio/example/cpp03/http/server2/io_service_pool.cpp]
125 * [@boost_asio/example/cpp03/http/server2/io_service_pool.hpp]
126 * [@boost_asio/example/cpp03/http/server2/main.cpp]
127 * [@boost_asio/example/cpp03/http/server2/mime_types.cpp]
128 * [@boost_asio/example/cpp03/http/server2/mime_types.hpp]
129 * [@boost_asio/example/cpp03/http/server2/reply.cpp]
130 * [@boost_asio/example/cpp03/http/server2/reply.hpp]
131 * [@boost_asio/example/cpp03/http/server2/request.hpp]
132 * [@boost_asio/example/cpp03/http/server2/request_handler.cpp]
133 * [@boost_asio/example/cpp03/http/server2/request_handler.hpp]
134 * [@boost_asio/example/cpp03/http/server2/request_parser.cpp]
135 * [@boost_asio/example/cpp03/http/server2/request_parser.hpp]
136 * [@boost_asio/example/cpp03/http/server2/server.cpp]
137 * [@boost_asio/example/cpp03/http/server2/server.hpp]
140 [heading HTTP Server 3]
142 An HTTP server using a single io_service and a thread pool calling `io_service::run()`.
144 * [@boost_asio/example/cpp03/http/server3/connection.cpp]
145 * [@boost_asio/example/cpp03/http/server3/connection.hpp]
146 * [@boost_asio/example/cpp03/http/server3/header.hpp]
147 * [@boost_asio/example/cpp03/http/server3/main.cpp]
148 * [@boost_asio/example/cpp03/http/server3/mime_types.cpp]
149 * [@boost_asio/example/cpp03/http/server3/mime_types.hpp]
150 * [@boost_asio/example/cpp03/http/server3/reply.cpp]
151 * [@boost_asio/example/cpp03/http/server3/reply.hpp]
152 * [@boost_asio/example/cpp03/http/server3/request.hpp]
153 * [@boost_asio/example/cpp03/http/server3/request_handler.cpp]
154 * [@boost_asio/example/cpp03/http/server3/request_handler.hpp]
155 * [@boost_asio/example/cpp03/http/server3/request_parser.cpp]
156 * [@boost_asio/example/cpp03/http/server3/request_parser.hpp]
157 * [@boost_asio/example/cpp03/http/server3/server.cpp]
158 * [@boost_asio/example/cpp03/http/server3/server.hpp]
161 [heading HTTP Server 4]
163 A single-threaded HTTP server implemented using stackless coroutines.
165 * [@boost_asio/example/cpp03/http/server4/file_handler.cpp]
166 * [@boost_asio/example/cpp03/http/server4/file_handler.hpp]
167 * [@boost_asio/example/cpp03/http/server4/header.hpp]
168 * [@boost_asio/example/cpp03/http/server4/main.cpp]
169 * [@boost_asio/example/cpp03/http/server4/mime_types.cpp]
170 * [@boost_asio/example/cpp03/http/server4/mime_types.hpp]
171 * [@boost_asio/example/cpp03/http/server4/reply.cpp]
172 * [@boost_asio/example/cpp03/http/server4/reply.hpp]
173 * [@boost_asio/example/cpp03/http/server4/request.hpp]
174 * [@boost_asio/example/cpp03/http/server4/request_parser.cpp]
175 * [@boost_asio/example/cpp03/http/server4/request_parser.hpp]
176 * [@boost_asio/example/cpp03/http/server4/server.cpp]
177 * [@boost_asio/example/cpp03/http/server4/server.hpp]
182 This example shows how to use raw sockets with ICMP to ping a remote host.
184 * [@boost_asio/example/cpp03/icmp/ping.cpp]
185 * [@boost_asio/example/cpp03/icmp/ipv4_header.hpp]
186 * [@boost_asio/example/cpp03/icmp/icmp_header.hpp]
191 This example shows how to customise handler invocation. Completion handlers are
192 added to a priority queue rather than executed immediately.
194 * [@boost_asio/example/cpp03/invocation/prioritised_handlers.cpp]
199 Two examples showing how to use [link boost_asio.reference.ip__tcp.iostream
202 * [@boost_asio/example/cpp03/iostreams/daytime_client.cpp]
203 * [@boost_asio/example/cpp03/iostreams/daytime_server.cpp]
204 * [@boost_asio/example/cpp03/iostreams/http_client.cpp]
209 An example showing the use of multicast to transmit packets to a group of
212 * [@boost_asio/example/cpp03/multicast/receiver.cpp]
213 * [@boost_asio/example/cpp03/multicast/sender.cpp]
216 [heading Serialization]
218 This example shows how Boost.Serialization can be used with asio to encode and
219 decode structures for transmission over a socket.
221 * [@boost_asio/example/cpp03/serialization/client.cpp]
222 * [@boost_asio/example/cpp03/serialization/connection.hpp]
223 * [@boost_asio/example/cpp03/serialization/server.cpp]
224 * [@boost_asio/example/cpp03/serialization/stock.hpp]
229 This example demonstrates how to integrate custom functionality (in this case,
230 for logging) into asio's [link boost_asio.reference.io_service io_service], and
231 how to use a custom service with [link
232 boost_asio.reference.basic_stream_socket basic_stream_socket<>].
234 * [@boost_asio/example/cpp03/services/basic_logger.hpp]
235 * [@boost_asio/example/cpp03/services/daytime_client.cpp]
236 * [@boost_asio/example/cpp03/services/logger.hpp]
237 * [@boost_asio/example/cpp03/services/logger_service.cpp]
238 * [@boost_asio/example/cpp03/services/logger_service.hpp]
239 * [@boost_asio/example/cpp03/services/stream_socket_service.hpp]
244 Example client program implementing the SOCKS 4 protocol for communication via
247 * [@boost_asio/example/cpp03/socks4/sync_client.cpp]
248 * [@boost_asio/example/cpp03/socks4/socks4.hpp]
253 Example client and server programs showing the use of the [link
254 boost_asio.reference.ssl__stream ssl::stream<>] template with asynchronous operations.
256 * [@boost_asio/example/cpp03/ssl/client.cpp]
257 * [@boost_asio/example/cpp03/ssl/server.cpp]
262 A collection of examples showing how to cancel long running asynchronous
263 operations after a period of time.
265 * [@boost_asio/example/cpp03/timeouts/async_tcp_client.cpp]
266 * [@boost_asio/example/cpp03/timeouts/blocking_tcp_client.cpp]
267 * [@boost_asio/example/cpp03/timeouts/blocking_udp_client.cpp]
268 * [@boost_asio/example/cpp03/timeouts/server.cpp]
273 Examples showing how to customise deadline_timer using different time types.
275 * [@boost_asio/example/cpp03/timers/tick_count_timer.cpp]
276 * [@boost_asio/example/cpp03/timers/time_t_timer.cpp]
281 Example illustrating mixed synchronous and asynchronous operations, and how to
282 use Boost.Lambda with Boost.Asio.
284 * [@boost_asio/example/cpp03/porthopper/protocol.hpp]
285 * [@boost_asio/example/cpp03/porthopper/client.cpp]
286 * [@boost_asio/example/cpp03/porthopper/server.cpp]
289 [heading Nonblocking]
291 Example demonstrating reactor-style operations for integrating a third-party
292 library that wants to perform the I/O operations itself.
294 * [@boost_asio/example/cpp03/nonblocking/third_party_lib.cpp]
299 Example of using the boost::asio::spawn() function, a wrapper around the
300 [@http://www.boost.org/doc/libs/release/libs/coroutine/index.html Boost.Coroutine]
301 library, to implement a chain of asynchronous operations using stackful
304 * [@boost_asio/example/cpp03/spawn/echo_server.cpp]
307 [heading UNIX Domain Sockets]
309 Examples showing how to use UNIX domain (local) sockets.
311 * [@boost_asio/example/cpp03/local/connect_pair.cpp]
312 * [@boost_asio/example/cpp03/local/stream_server.cpp]
313 * [@boost_asio/example/cpp03/local/stream_client.cpp]
318 An example showing how to use the Windows-specific function `TransmitFile`
321 * [@boost_asio/example/cpp03/windows/transmit_file.cpp]
327 [section:cpp11_examples C++11 Examples]
332 This example shows how to customise the allocation of memory associated with
333 asynchronous operations.
335 * [@boost_asio/example/cpp11/allocation/server.cpp]
340 This example demonstrates how to create reference counted buffers that can be
341 used with socket read and write operations.
343 * [@boost_asio/example/cpp11/buffers/reference_counted.cpp]
348 This example implements a chat server and client. The programs use a custom
349 protocol with a fixed length message header and variable length message body.
351 * [@boost_asio/example/cpp11/chat/chat_message.hpp]
352 * [@boost_asio/example/cpp11/chat/chat_client.cpp]
353 * [@boost_asio/example/cpp11/chat/chat_server.cpp]
358 A collection of simple clients and servers, showing the use of both synchronous
359 and asynchronous operations.
361 * [@boost_asio/example/cpp11/echo/async_tcp_echo_server.cpp]
362 * [@boost_asio/example/cpp11/echo/async_udp_echo_server.cpp]
363 * [@boost_asio/example/cpp11/echo/blocking_tcp_echo_client.cpp]
364 * [@boost_asio/example/cpp11/echo/blocking_tcp_echo_server.cpp]
365 * [@boost_asio/example/cpp11/echo/blocking_udp_echo_client.cpp]
366 * [@boost_asio/example/cpp11/echo/blocking_udp_echo_server.cpp]
371 This example demonstrates how to use std::future in conjunction with
372 Boost.Asio's asynchronous operations.
374 * [@boost_asio/example/cpp11/futures/daytime_client.cpp]
377 [heading HTTP Server]
379 This example illustrates the use of asio in a simple single-threaded server
380 implementation of HTTP 1.0. It demonstrates how to perform a clean shutdown by
381 cancelling all outstanding asynchronous operations.
383 * [@boost_asio/example/cpp11/http/server/connection.cpp]
384 * [@boost_asio/example/cpp11/http/server/connection.hpp]
385 * [@boost_asio/example/cpp11/http/server/connection_manager.cpp]
386 * [@boost_asio/example/cpp11/http/server/connection_manager.hpp]
387 * [@boost_asio/example/cpp11/http/server/header.hpp]
388 * [@boost_asio/example/cpp11/http/server/main.cpp]
389 * [@boost_asio/example/cpp11/http/server/mime_types.cpp]
390 * [@boost_asio/example/cpp11/http/server/mime_types.hpp]
391 * [@boost_asio/example/cpp11/http/server/reply.cpp]
392 * [@boost_asio/example/cpp11/http/server/reply.hpp]
393 * [@boost_asio/example/cpp11/http/server/request.hpp]
394 * [@boost_asio/example/cpp11/http/server/request_handler.cpp]
395 * [@boost_asio/example/cpp11/http/server/request_handler.hpp]
396 * [@boost_asio/example/cpp11/http/server/request_parser.cpp]
397 * [@boost_asio/example/cpp11/http/server/request_parser.hpp]
398 * [@boost_asio/example/cpp11/http/server/server.cpp]
399 * [@boost_asio/example/cpp11/http/server/server.hpp]
404 Example of using the boost::asio::spawn() function, a wrapper around the
405 [@http://www.boost.org/doc/libs/release/libs/coroutine/index.html Boost.Coroutine]
406 library, to implement a chain of asynchronous operations using stackful
409 * [@boost_asio/example/cpp11/spawn/echo_server.cpp]