Boost::asio 套接字 - 如何干净地断开它们?

vla*_*mir 5 c++ sockets boost boost-asio

我正在为我的服务器应用程序使用 boost 异步套接字。我创建了一个disconnect()函数,它调用boost的close(),然后删除套接字(操作符delete)。当从异步之一调用该函数时,这是可以的。处理程序,但是当我从主代码库内部调用它时,整个应用程序在其中一个异步处理程序处崩溃。如何在boost中很好地关闭套接字?

Art*_*yom 2

确保只要可能使用该对象的处理程序存在,该对象就处于活动状态。

在您调用 close 之后,很可能会调用使用此套接字的处理程序之一(因为它向处理程序报告错误),然后访问死指针...

boost::shared_ptr通常,可以使用和boost::enable_shared_from_this并将其传递到处理程序中轻松完成生命周期处理。请参阅 Boost.Asio 提供的大量示例。

一旦您熟悉了这种技术,您提出的问题对您来说就会显得微不足道。

  • @vladimir,仅仅因为你觉得某些东西更原生,并不意味着它是一个好的实践。智能指针解决了很多问题,否则这些问题可能会很麻烦:) (5认同)