我有一个客户端 - 服务器应用程序,通过SSL执行连接。
并使用boost::asio
。
建立连接的相关客户端代码是
Client::Client(boost::asio::io_service& io_service,
boost::asio::ssl::context& context,
boost::asio::ip::tcp::resolver::iterator endpoint_iterator) : AbstractNetworkOps(io_service, context)
{
socket_.set_verify_mode(boost::asio::ssl::verify_peer);
socket_.set_verify_callback(boost::bind(&Client::verify_certificate, this, _1, _2));
this->endpoint_iterator = endpoint_iterator;
}
Client::~Client() {}
void Client::startConnection() {
Log("Start connecting...");
boost::system::error_code ec;
boost::asio::connect(socket_.lowest_layer(), this->endpoint_iterator, ec);
handle_connect(ec);
}
在进行一定数量的消息交换后,客户端应该关闭我称之为以下方法的连接
void AbstractNetworkOps::saveCloseSocket() {
boost::system::error_code ec;
socket_.lowest_layer().cancel();
socket_.shutdown(ec);
if (ec) {
stringstream ss;
Log("Socket shutdown error: %s", ec.message());
} else {
socket_.lowest_layer().close();
}
}
这里的问题是,对socket_.shutdown(ec)
的调用会以某种方式阻止而不会返回!?
这不是正确的做法吗?
P.S。该应用程序非常大,这就是为什么我不能在这里发布整个代码但请告诉我是否缺少一些重要的部分,所以我可以更新它