Boost logo

Boost Users :

Subject: Re: [Boost-users] [boost::asio] exception not passed to async callback
From: Igor R (boost.lists_at_[hidden])
Date: 2010-03-08 18:41:05


> 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_);


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net