コードでメモリ リークの問題が発生しました。
socket.handshake() 関数を呼び出して
からメイン スレッドを終了すると、メモリ リークが発生しました。
ただし、「socket.handshake」を削除してから
メインスレッドを実行して終了すると、メモリリークの問題がなくなります。
1. サンプルコード : メモリリーク
#include <boost/asio.hpp>
#include <boost/asio/ssl.hpp>
#include <boost/thread.hpp>
using namespace boost;
void ThSslEchoClient()
{
try
{
asio::io_service ios;
asio::ssl::context context(boost::asio::ssl::context::sslv23);
context.set_options(
asio::ssl::context::default_workarounds
| asio::ssl::context::no_sslv2
| asio::ssl::context::single_dh_use);
asio::ssl::stream<boost::asio::ip::tcp::socket> socket(ios, context);
boost::system::error_code ec;
boost::asio::ip::tcp::endpoint host(boost::asio::ip::address::from_string("127.0.0.1"), 13);
socket.lowest_layer().connect(host, ec);
// REMOVE THE FOLLOWING LINE FOR COMPARISON
socket.handshake(asio::ssl::stream_base::client, ec);
if (ec)
throw boost::system::system_error(ec);
}
catch (std::exception& _e)
{
std::cerr << _e.what() << std::endl;
}
}
void TestBoostAsioSslEchoClient()
{
boost::thread_group tg;
tg.create_thread(ThSslEchoClient);
tg.join_all();
}
2. サンプル コード : メモリ リークなし。
(「socket.handshake」を削除するだけです)
// REMOVE THE FOLLOWING LINE FOR COMPARISON
//socket.handshake(asio::ssl::stream_base::client, ec);
どこが悪いのかわからない。私を助けてください。