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

时间:2010-12-09 11:17:18

标签: c++ sockets boost boost-asio

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

2 个答案:

答案 0 :(得分:2)

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

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

通常,可以使用boost::shared_ptrboost::enable_shared_from_this轻松完成生命周期处理,并将其传递给处理程序。查看随Boost.Asio提供的大量示例。

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

答案 1 :(得分:1)

您也想查看套接字上的shutdown方法。它无法解决崩溃的应用程序。上面的Artyom已经解释了原因,但它仍然很有趣。 如果在不调用shutdown的情况下关闭套接字,则可能导致发送RST而不是优雅的FIN握手。