program crash con boost :: asio :: spawn and socket :: async_receive_from

int main() {
  boost::asio::io_service io_service;

  Worker ob1(&io_service);

  ob1.AsyncRead();
  io_service.run();

}

void Worker::AsyncRead() {
   socket.async_receive_from(buffer,endpoint, handler);
}

void handler (const boost::system::error_code& error, size_t bytes_received) {
   if(!error)
       handleData();
   AsyncRead();
}

Ahora esto funciona perfectamente bien. Pero si uso boost :: Spawn () para hacer asyncRead () se bloquea.

  void work(boost::asio::io_service* io_service) {

     auto ob1 = std::make_shared<Worker>(io_service);
  boost::asio::spawn(*io_service, [ob1](
                                      boost::asio::yield_context yield) {

      ob1->AsyncRead();

   });

  }

   int main() {
      boost::asio::io_service io_service;
       work(&io_service);

      io_service.run();

    }

El seguimiento de la pila para el bloqueo es:

PC: @           0x4e3502 boost::asio::basic_io_object<>::get_service()
*** SIGSEGV (@0x18) received by PID 25135 (TID 0x7f6bde13b7c0) from PID 24; stack trace: ***
    @     0x7f6bdd37d390 (unknown)
    @           0x4e3502 boost::asio::basic_io_object<>::get_service()
    @           0x4e3074 boost::asio::basic_datagram_socket<>::async_receive_from<>()

Quiero que funcione conboost::spawn(). ¿Qué pasará conspawn() una vez miwork() ¿devoluciones

Respuestas a la pregunta(1)

Su respuesta a la pregunta