[/
 / Copyright (c) 2003-2010 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:Service Service requirements]

A class is a service if it is publicly derived from another service, or if it
is a class derived from `io_service::service` and contains a
publicly-accessible declaration as follows:

  static io_service::id id;

All services define a one-argument constructor that takes a reference to the
`io_service` object that owns the service. This constructor is /explicit/,
preventing its participation in automatic conversions. For example:

  class my_service : public io_service::service
  {
  public:
    static io_service::id id;
    explicit my_service(io_service& ios);
  private:
    virtual void shutdown_service();
    ...
  };

A service's `shutdown_service` member function must cause all copies of
user-defined handler objects that are held by the service to be destroyed.

[endsect]
