
On 22 Aug 2014 at 16:20, wrote:
I'm playing with Boost.ASIO framework and failed to find a complete answer on the following question. [snip] Looking at least at async_write() implementation, it cannot be relied upon: - async_write executes a chain of boost::asio::detail::write_op() operations: - if asio_handler_allocate() may throw then - write_op::stream_.async_write_some() may throw then - write_op.handler_() might never be called
So, either we should never rely on this assumption, or there's a bug in async_write(). Not relying on this assumption what is the reliable way of building applications with Boost.Asio?
I can't speak for ASIO, but AFIO explicitly makes no guarantees if a bad_alloc exception is ever thrown. Otherwise it guarantees exception safety. I would be highly surprised if ASIO can do any better than AFIO here. Handling bad_alloc is extremely tough when your exception handling paths have no choice but to allocate memory, which for something involving async i/o they must. The traditional solution is to feed the code an allocator which will never, ever run out of memory. That may be useful for ASIO too. Niall -- ned Productions Limited Consulting http://www.nedproductions.biz/ http://ie.linkedin.com/in/nialldouglas/