asio Segmentation fault ,reactor_op,调用回调函数失败
在windows上跑不会出错,放到linux上跑出现这样的问题,错误码125 : operation canceled有时还会报这样的异常,我遇到该问题原因是多次close导致的,回调函数调用时,套接字已经关闭资源已经释放
解决方法
boost::asio::async_write(socket_, reply_.to_buffers(),
[this, self](boost::system::error_code ec, std::size_t)
{
if (!ec) //如果无异常,执行后续操作
{
// Initiate graceful connection closure.
boost::system::error_code ignored_ec;
socket_.shutdown(boost::asio::ip::tcp::socket::shutdown_both,
ignored_ec);
}else if (ec != boost::asio::error::operation_aborted)
//当出现异常且错误码不为本端已关闭时关闭套接字
{
connection_manager_.stop(shared_from_this());//close()释放资源
}
});
该方法从asio example里的httpserver搬过来的,意思就是当套接字如果已经关闭就不再调用close(),把所有的异步io函数全部改成这样的形式在linux上就不会出错