【发布时间】:2017-04-27 22:04:06
【问题描述】:
我正在使用以下代码成功建立连接、发送和接收消息。我想要做的是以某种方式返回已经建立的连接。我假设我需要返回套接字。 在写这个主题之前,我阅读了一些相关的主题——其中一些提到返回套接字不是一个好主意。这里建议使用共享。 Passing around boost::asio::ip::tcp::socket 不幸的是,我不熟悉这种类型的指针及其用法。你能帮我解决这个问题吗?
try {
boost::asio::io_service io_service;
tcp::resolver resolver(io_service);
tcp::resolver::query query(server, port);
tcp::resolver::iterator endpoint_iterator = resolver.resolve(query);
my_socket = new tcp::socket(io_service);
boost::system::error_code error = boost::asio::error::host_not_found;
boost::asio::connect(*my_socket, endpoint_iterator);
} catch (std::exception& e) {
std::cerr << e.what() << std::endl;
}
【问题讨论】:
-
如果你有 c++11 或更高版本,忽略所有关于共享指针的废话并返回套接字。从 c++11 开始,asio io 对象支持移动构造和移动分配。 asio 套接字非常轻量级 - 结构包含两个指针,仅此而已。