]>
Commit | Line | Data |
---|---|---|
1 | [/ | |
2 | / Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com) | |
3 | / | |
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) | |
6 | /] | |
7 | ||
8 | [section:examples Examples] | |
9 | ||
10 | ||
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. | |
14 | ||
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. | |
18 | ||
19 | ||
20 | [section:cpp03_examples C++03 Examples] | |
21 | ||
22 | ||
23 | [heading Allocation] | |
24 | ||
25 | This example shows how to customise the allocation of memory associated with | |
26 | asynchronous operations. | |
27 | ||
28 | * [@boost_asio/example/cpp03/allocation/server.cpp] | |
29 | ||
30 | ||
31 | [heading Buffers] | |
32 | ||
33 | This example demonstrates how to create reference counted buffers that can be | |
34 | used with socket read and write operations. | |
35 | ||
36 | * [@boost_asio/example/cpp03/buffers/reference_counted.cpp] | |
37 | ||
38 | ||
39 | [heading Chat] | |
40 | ||
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. | |
43 | ||
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] | |
47 | ||
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. | |
51 | ||
52 | * [@boost_asio/example/cpp03/chat/posix_chat_client.cpp] | |
53 | ||
54 | ||
55 | [heading Echo] | |
56 | ||
57 | A collection of simple clients and servers, showing the use of both synchronous | |
58 | and asynchronous operations. | |
59 | ||
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] | |
66 | ||
67 | ||
68 | [heading Fork] | |
69 | ||
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 | |
72 | a daemon process: | |
73 | ||
74 | * [@boost_asio/example/cpp03/fork/daemon.cpp] | |
75 | ||
76 | The second example demonstrates how it is possible to fork a process from | |
77 | within a completion handler. | |
78 | ||
79 | * [@boost_asio/example/cpp03/fork/process_per_connection.cpp] | |
80 | ||
81 | ||
82 | [heading HTTP Client] | |
83 | ||
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. | |
87 | ||
88 | * [@boost_asio/example/cpp03/http/client/sync_client.cpp] | |
89 | * [@boost_asio/example/cpp03/http/client/async_client.cpp] | |
90 | ||
91 | ||
92 | [heading HTTP Server] | |
93 | ||
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. | |
97 | ||
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] | |
115 | ||
116 | ||
117 | [heading HTTP Server 2] | |
118 | ||
119 | An HTTP server using an io_service-per-CPU design. | |
120 | ||
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] | |
138 | ||
139 | ||
140 | [heading HTTP Server 3] | |
141 | ||
142 | An HTTP server using a single io_service and a thread pool calling `io_service::run()`. | |
143 | ||
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] | |
159 | ||
160 | ||
161 | [heading HTTP Server 4] | |
162 | ||
163 | A single-threaded HTTP server implemented using stackless coroutines. | |
164 | ||
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] | |
178 | ||
179 | ||
180 | [heading ICMP] | |
181 | ||
182 | This example shows how to use raw sockets with ICMP to ping a remote host. | |
183 | ||
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] | |
187 | ||
188 | ||
189 | [heading Invocation] | |
190 | ||
191 | This example shows how to customise handler invocation. Completion handlers are | |
192 | added to a priority queue rather than executed immediately. | |
193 | ||
194 | * [@boost_asio/example/cpp03/invocation/prioritised_handlers.cpp] | |
195 | ||
196 | ||
197 | [heading Iostreams] | |
198 | ||
199 | Two examples showing how to use [link boost_asio.reference.ip__tcp.iostream | |
200 | ip::tcp::iostream]. | |
201 | ||
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] | |
205 | ||
206 | ||
207 | [heading Multicast] | |
208 | ||
209 | An example showing the use of multicast to transmit packets to a group of | |
210 | subscribers. | |
211 | ||
212 | * [@boost_asio/example/cpp03/multicast/receiver.cpp] | |
213 | * [@boost_asio/example/cpp03/multicast/sender.cpp] | |
214 | ||
215 | ||
216 | [heading Serialization] | |
217 | ||
218 | This example shows how Boost.Serialization can be used with asio to encode and | |
219 | decode structures for transmission over a socket. | |
220 | ||
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] | |
225 | ||
226 | ||
227 | [heading Services] | |
228 | ||
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<>]. | |
233 | ||
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] | |
240 | ||
241 | ||
242 | [heading SOCKS 4] | |
243 | ||
244 | Example client program implementing the SOCKS 4 protocol for communication via | |
245 | a proxy. | |
246 | ||
247 | * [@boost_asio/example/cpp03/socks4/sync_client.cpp] | |
248 | * [@boost_asio/example/cpp03/socks4/socks4.hpp] | |
249 | ||
250 | ||
251 | [heading SSL] | |
252 | ||
253 | Example client and server programs showing the use of the [link | |
254 | boost_asio.reference.ssl__stream ssl::stream<>] template with asynchronous operations. | |
255 | ||
256 | * [@boost_asio/example/cpp03/ssl/client.cpp] | |
257 | * [@boost_asio/example/cpp03/ssl/server.cpp] | |
258 | ||
259 | ||
260 | [heading Timeouts] | |
261 | ||
262 | A collection of examples showing how to cancel long running asynchronous | |
263 | operations after a period of time. | |
264 | ||
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] | |
269 | ||
270 | ||
271 | [heading Timers] | |
272 | ||
273 | Examples showing how to customise deadline_timer using different time types. | |
274 | ||
275 | * [@boost_asio/example/cpp03/timers/tick_count_timer.cpp] | |
276 | * [@boost_asio/example/cpp03/timers/time_t_timer.cpp] | |
277 | ||
278 | ||
279 | [heading Porthopper] | |
280 | ||
281 | Example illustrating mixed synchronous and asynchronous operations, and how to | |
282 | use Boost.Lambda with Boost.Asio. | |
283 | ||
284 | * [@boost_asio/example/cpp03/porthopper/protocol.hpp] | |
285 | * [@boost_asio/example/cpp03/porthopper/client.cpp] | |
286 | * [@boost_asio/example/cpp03/porthopper/server.cpp] | |
287 | ||
288 | ||
289 | [heading Nonblocking] | |
290 | ||
291 | Example demonstrating reactor-style operations for integrating a third-party | |
292 | library that wants to perform the I/O operations itself. | |
293 | ||
294 | * [@boost_asio/example/cpp03/nonblocking/third_party_lib.cpp] | |
295 | ||
296 | ||
297 | [heading Spawn] | |
298 | ||
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 | |
302 | coroutines. | |
303 | ||
304 | * [@boost_asio/example/cpp03/spawn/echo_server.cpp] | |
305 | ||
306 | ||
307 | [heading UNIX Domain Sockets] | |
308 | ||
309 | Examples showing how to use UNIX domain (local) sockets. | |
310 | ||
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] | |
314 | ||
315 | ||
316 | [heading Windows] | |
317 | ||
318 | An example showing how to use the Windows-specific function `TransmitFile` | |
319 | with Boost.Asio. | |
320 | ||
321 | * [@boost_asio/example/cpp03/windows/transmit_file.cpp] | |
322 | ||
323 | ||
324 | [endsect] | |
325 | ||
326 | ||
327 | [section:cpp11_examples C++11 Examples] | |
328 | ||
329 | ||
330 | [heading Allocation] | |
331 | ||
332 | This example shows how to customise the allocation of memory associated with | |
333 | asynchronous operations. | |
334 | ||
335 | * [@boost_asio/example/cpp11/allocation/server.cpp] | |
336 | ||
337 | ||
338 | [heading Buffers] | |
339 | ||
340 | This example demonstrates how to create reference counted buffers that can be | |
341 | used with socket read and write operations. | |
342 | ||
343 | * [@boost_asio/example/cpp11/buffers/reference_counted.cpp] | |
344 | ||
345 | ||
346 | [heading Chat] | |
347 | ||
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. | |
350 | ||
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] | |
354 | ||
355 | ||
356 | [heading Echo] | |
357 | ||
358 | A collection of simple clients and servers, showing the use of both synchronous | |
359 | and asynchronous operations. | |
360 | ||
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] | |
367 | ||
368 | ||
369 | [heading Futures] | |
370 | ||
371 | This example demonstrates how to use std::future in conjunction with | |
372 | Boost.Asio's asynchronous operations. | |
373 | ||
374 | * [@boost_asio/example/cpp11/futures/daytime_client.cpp] | |
375 | ||
376 | ||
377 | [heading HTTP Server] | |
378 | ||
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. | |
382 | ||
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] | |
400 | ||
401 | ||
402 | [heading Spawn] | |
403 | ||
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 | |
407 | coroutines. | |
408 | ||
409 | * [@boost_asio/example/cpp11/spawn/echo_server.cpp] | |
410 | ||
411 | ||
412 | [endsect] | |
413 | ||
414 | ||
415 | [endsect] |