[/
 / Copyright (c) 2003-2012 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)
 /]

[section:examples Examples]


[heading Allocation]

This example shows how to customise the allocation of memory associated with
asynchronous operations.

* [@boost_asio/example/allocation/server.cpp]


[heading Buffers]

This example demonstrates how to create reference counted buffers that can be
used with socket read and write operations.

* [@boost_asio/example/buffers/reference_counted.cpp]


[heading Chat]

This example implements a chat server and client. The programs use a custom
protocol with a fixed length message header and variable length message body.

* [@boost_asio/example/chat/chat_message.hpp]
* [@boost_asio/example/chat/chat_client.cpp]
* [@boost_asio/example/chat/chat_server.cpp]

The following POSIX-specific chat client demonstrates how to use the
[link boost_asio.reference.posix__stream_descriptor posix::stream_descriptor] class to
perform console input and output.

* [@boost_asio/example/chat/posix_chat_client.cpp]


[heading Echo]

A collection of simple clients and servers, showing the use of both synchronous
and asynchronous operations.

* [@boost_asio/example/echo/async_tcp_echo_server.cpp]
* [@boost_asio/example/echo/async_udp_echo_server.cpp]
* [@boost_asio/example/echo/blocking_tcp_echo_client.cpp]
* [@boost_asio/example/echo/blocking_tcp_echo_server.cpp]
* [@boost_asio/example/echo/blocking_udp_echo_client.cpp]
* [@boost_asio/example/echo/blocking_udp_echo_server.cpp]


[heading Fork]

These POSIX-specific examples show how to use Boost.Asio in conjunction with the
`fork()` system call. The first example illustrates the steps required to start
a daemon process:

* [@boost_asio/example/fork/daemon.cpp]

The second example demonstrates how it is possible to fork a process from
within a completion handler.

* [@boost_asio/example/fork/process_per_connection.cpp]


[heading HTTP Client]

Example programs implementing simple HTTP 1.0 clients. These examples show how
to use the [link boost_asio.reference.read_until read_until] and [link
boost_asio.reference.async_read_until async_read_until] functions.

* [@boost_asio/example/http/client/sync_client.cpp]
* [@boost_asio/example/http/client/async_client.cpp]


[heading HTTP Server]

This example illustrates the use of asio in a simple single-threaded server
implementation of HTTP 1.0. It demonstrates how to perform a clean shutdown by
cancelling all outstanding asynchronous operations.

* [@boost_asio/example/http/server/connection.cpp]
* [@boost_asio/example/http/server/connection.hpp]
* [@boost_asio/example/http/server/connection_manager.cpp]
* [@boost_asio/example/http/server/connection_manager.hpp]
* [@boost_asio/example/http/server/header.hpp]
* [@boost_asio/example/http/server/main.cpp]
* [@boost_asio/example/http/server/mime_types.cpp]
* [@boost_asio/example/http/server/mime_types.hpp]
* [@boost_asio/example/http/server/reply.cpp]
* [@boost_asio/example/http/server/reply.hpp]
* [@boost_asio/example/http/server/request.hpp]
* [@boost_asio/example/http/server/request_handler.cpp]
* [@boost_asio/example/http/server/request_handler.hpp]
* [@boost_asio/example/http/server/request_parser.cpp]
* [@boost_asio/example/http/server/request_parser.hpp]
* [@boost_asio/example/http/server/server.cpp]
* [@boost_asio/example/http/server/server.hpp]


[heading HTTP Server 2]

An HTTP server using an io_service-per-CPU design.

* [@boost_asio/example/http/server2/connection.cpp]
* [@boost_asio/example/http/server2/connection.hpp]
* [@boost_asio/example/http/server2/header.hpp]
* [@boost_asio/example/http/server2/io_service_pool.cpp]
* [@boost_asio/example/http/server2/io_service_pool.hpp]
* [@boost_asio/example/http/server2/main.cpp]
* [@boost_asio/example/http/server2/mime_types.cpp]
* [@boost_asio/example/http/server2/mime_types.hpp]
* [@boost_asio/example/http/server2/reply.cpp]
* [@boost_asio/example/http/server2/reply.hpp]
* [@boost_asio/example/http/server2/request.hpp]
* [@boost_asio/example/http/server2/request_handler.cpp]
* [@boost_asio/example/http/server2/request_handler.hpp]
* [@boost_asio/example/http/server2/request_parser.cpp]
* [@boost_asio/example/http/server2/request_parser.hpp]
* [@boost_asio/example/http/server2/server.cpp]
* [@boost_asio/example/http/server2/server.hpp]


[heading HTTP Server 3]

An HTTP server using a single io_service and a thread pool calling `io_service::run()`.

* [@boost_asio/example/http/server3/connection.cpp]
* [@boost_asio/example/http/server3/connection.hpp]
* [@boost_asio/example/http/server3/header.hpp]
* [@boost_asio/example/http/server3/main.cpp]
* [@boost_asio/example/http/server3/mime_types.cpp]
* [@boost_asio/example/http/server3/mime_types.hpp]
* [@boost_asio/example/http/server3/reply.cpp]
* [@boost_asio/example/http/server3/reply.hpp]
* [@boost_asio/example/http/server3/request.hpp]
* [@boost_asio/example/http/server3/request_handler.cpp]
* [@boost_asio/example/http/server3/request_handler.hpp]
* [@boost_asio/example/http/server3/request_parser.cpp]
* [@boost_asio/example/http/server3/request_parser.hpp]
* [@boost_asio/example/http/server3/server.cpp]
* [@boost_asio/example/http/server3/server.hpp]


[heading HTTP Server 4]

A single-threaded HTTP server implemented using stackless coroutines.

* [@boost_asio/example/http/server4/coroutine.hpp]
* [@boost_asio/example/http/server4/file_handler.cpp]
* [@boost_asio/example/http/server4/file_handler.hpp]
* [@boost_asio/example/http/server4/header.hpp]
* [@boost_asio/example/http/server4/main.cpp]
* [@boost_asio/example/http/server4/mime_types.cpp]
* [@boost_asio/example/http/server4/mime_types.hpp]
* [@boost_asio/example/http/server4/reply.cpp]
* [@boost_asio/example/http/server4/reply.hpp]
* [@boost_asio/example/http/server4/request.hpp]
* [@boost_asio/example/http/server4/request_parser.cpp]
* [@boost_asio/example/http/server4/request_parser.hpp]
* [@boost_asio/example/http/server4/server.cpp]
* [@boost_asio/example/http/server4/server.hpp]
* [@boost_asio/example/http/server4/unyield.hpp]
* [@boost_asio/example/http/server4/yield.hpp]


[heading ICMP]

This example shows how to use raw sockets with ICMP to ping a remote host.

* [@boost_asio/example/icmp/ping.cpp]
* [@boost_asio/example/icmp/ipv4_header.hpp]
* [@boost_asio/example/icmp/icmp_header.hpp]


[heading Invocation]

This example shows how to customise handler invocation. Completion handlers are
added to a priority queue rather than executed immediately.

* [@boost_asio/example/invocation/prioritised_handlers.cpp]


[heading Iostreams]

Two examples showing how to use [link boost_asio.reference.ip__tcp.iostream
ip::tcp::iostream].

* [@boost_asio/example/iostreams/daytime_client.cpp]
* [@boost_asio/example/iostreams/daytime_server.cpp]
* [@boost_asio/example/iostreams/http_client.cpp]


[heading Multicast]

An example showing the use of multicast to transmit packets to a group of
subscribers.

* [@boost_asio/example/multicast/receiver.cpp]
* [@boost_asio/example/multicast/sender.cpp]


[heading Serialization]

This example shows how Boost.Serialization can be used with asio to encode and
decode structures for transmission over a socket.

* [@boost_asio/example/serialization/client.cpp]
* [@boost_asio/example/serialization/connection.hpp]
* [@boost_asio/example/serialization/server.cpp]
* [@boost_asio/example/serialization/stock.hpp]


[heading Services]

This example demonstrates how to integrate custom functionality (in this case,
for logging) into asio's [link boost_asio.reference.io_service io_service], and
how to use a custom service with [link
boost_asio.reference.basic_stream_socket basic_stream_socket<>].

* [@boost_asio/example/services/basic_logger.hpp]
* [@boost_asio/example/services/daytime_client.cpp]
* [@boost_asio/example/services/logger.hpp]
* [@boost_asio/example/services/logger_service.cpp]
* [@boost_asio/example/services/logger_service.hpp]
* [@boost_asio/example/services/stream_socket_service.hpp]


[heading SOCKS 4]

Example client program implementing the SOCKS 4 protocol for communication via
a proxy.

* [@boost_asio/example/socks4/sync_client.cpp]
* [@boost_asio/example/socks4/socks4.hpp]


[heading SSL]

Example client and server programs showing the use of the [link
boost_asio.reference.ssl__stream ssl::stream<>] template with asynchronous operations.

* [@boost_asio/example/ssl/client.cpp]
* [@boost_asio/example/ssl/server.cpp]


[heading Timeouts]

A collection of examples showing how to cancel long running asynchronous
operations after a period of time.

* [@boost_asio/example/timeouts/async_tcp_client.cpp]
* [@boost_asio/example/timeouts/blocking_tcp_client.cpp]
* [@boost_asio/example/timeouts/blocking_udp_client.cpp]
* [@boost_asio/example/timeouts/server.cpp]


[heading Timers]

Examples showing how to customise deadline_timer using different time types.

* [@boost_asio/example/timers/tick_count_timer.cpp]
* [@boost_asio/example/timers/time_t_timer.cpp]


[heading Porthopper]

Example illustrating mixed synchronous and asynchronous operations, and how to
use Boost.Lambda with Boost.Asio.

* [@boost_asio/example/porthopper/protocol.hpp]
* [@boost_asio/example/porthopper/client.cpp]
* [@boost_asio/example/porthopper/server.cpp]


[heading Nonblocking]

Example demonstrating reactor-style operations for integrating a third-party
library that wants to perform the I/O operations itself.

* [@boost_asio/example/nonblocking/third_party_lib.cpp]


[heading UNIX Domain Sockets]

Examples showing how to use UNIX domain (local) sockets.

* [@boost_asio/example/local/connect_pair.cpp]
* [@boost_asio/example/local/stream_server.cpp]
* [@boost_asio/example/local/stream_client.cpp]


[heading Windows]

An example showing how to use the Windows-specific function `TransmitFile`
with Boost.Asio.

* [@boost_asio/example/windows/transmit_file.cpp]


[endsect]
