
Right now i am having some problems with a TCP socket waiting for a pending async read operation. When the remote endpoint closes the connection due to some crash or other unexpected situation(i.e, without proper closing of the socket) my application is terminated with this message: "Terminate called after throwing an instance of 'boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::system::system_error>
' what(): Transport endpoint is not connected Aborted"
Maybe i am missing something here, because i expected any boost::system exceptions to be passed to the callback associated with the async read operation.
To be more exact, error_code is passed to the handler.
I am assuming that this exception is thrown in the io_service::run method, is that right? If so, why it is not passed to the callback? and what can i do to catch it, having the io_service::run running on a separeted thread?
I never encountered such behaviour, but you always can "wrap" io_service::run() with your own thread-function and catch exceptions: void thread_func(io_service *io) { try { io->run(); } catch(.........) { } } //... thread t(&thread_func, &io_);