假设我使用boost::asio::ssl::stream<boost::asio::ip::tcp::socket>
:
asio::ssl::stream<asio::ip::tcp::socket> s;
asio::connect(s.lowest_layer(), endpointIterator);
s.handshake(asio::ssl::stream_base::client);
等等。然后由于某种原因连接失败,甚至我断开连接。是否可以将其重用于将来的连接,还是必须为每个连接创建一个新对象?即包装流,像这样:
class BetterSslConnection
{
public:
BetterSslConnection() : mSocket(new asio::ssl::stream<asio::ip::tcp::socket>())
{
}
~BetterSslConnection()
{
if (mSocket)
{
mSocket->shutdown();
mSocket->lowest_layer().close();
}
}
void connect(... endpointIterator)
{
if (mSocket)
{
mSocket->shutdown();
mSocket->lowest_layer().close();
}
mSocket.reset(new asio::ssl::stream<asio::ip::tcp::socket>());
asio::connect(mSocket->lowest_layer(), endpointIterator);
mSocket->handshake(asio::ssl::stream_base::client);
// and so on.
}
private:
unique_ptr<asio::ssl::stream<asio::ip::tcp::socket>> mSocket;
};
类BetterSslConnection {