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.