I have understood it  yesterday evening when I read about boos.shared_ptr but I still don't understand why connection object must be noncopyable...
 
You can make it copyable if you wish, but if the an object has an asio socket as a member, then it's non-copyable just because the socket object is non-copyable.
 
I don't understand how it works :(. we have few io_service object which are run() in separated threads. but only one is maintained by async_accept chain trick. the rest run() should immediately return.
 
Please, read that example carefully, there's an explanation inside. You've got special "work" object that prevents io_service::run from stopping.