I always wished that ASIO made the const error_code& passed in non-const, and you could set it on return from the handler. You can still throw an exception of course to abort everything, but sometimes you don't want to abort everything. Sometimes you just want to fail.
What kind of errors do you want to return to Asio, and how do you want it to respond to them?
Right now if you throw an exception from within a handler the default action is to throw out the thread calling ioservice.run() which ran the handler. This isn't ideal - usually one would prefer failure to pop out of the initiating function instead. You can implement this manually using a custom async_result or easier, using future-promise, but I've always wished there was a lightweight non-allocating default propagation of handler failure => error_code => initiating function. So a super lightweight, non-allocating future-promise like object which can solely transport an error_code would be the default, that way end users can do .get() on the initiating function's return if they care, if not throw it away. Anyway, I figure that ship has sailed unfortunately. Niall -- ned Productions Limited Consulting http://www.nedproductions.biz/ http://ie.linkedin.com/in/nialldouglas/