orl*_*rlp 2 c++ boost boost-asio
好的,这是我目前的代码片段:
namespace bai = boost::asio::ip;
bai::tcp::socket tcp_connect(std::string hostname, std::string port) {
try {
boost::asio::io_service io_service;
bai::tcp::resolver resolver(io_service);
// we now try to get a list of endpoints to the server
bai::tcp::resolver::query query(hostname, port);
bai::tcp::resolver::iterator endpoint_iterator = resolver.resolve(query);
bai::tcp::resolver::iterator end;
// looking for a successful endpoint connection
bai::tcp::socket socket(io_service);
boost::system::error_code error = boost::asio::error::host_not_found;
while (error && endpoint_iterator != end) {
socket.close();
socket.connect(*endpoint_iterator++ , error);
}
if (error) throw boost::system::system_error(error);
return socket;
} catch (std::exception &ex) {
std::cout << "Exception: " << ex.what() << "\n";
}
}
Run Code Online (Sandbox Code Playgroud)
这应该返回一个boost::asio::ip::tcp::socket连接hostname上port.但是我遇到了一些难以理解的boost::noncopyable错误.但我的问题是,我该如何绕过这些插座呢?这有什么问题?
Eri*_*rik 13
socket无法复制.请boost::shared_ptr<bai::tcp::socket>改用.如果您可以复制套接字,那么如果最终有两个socket实例代表相同的底层操作系统套接字,则会出现各种有趣的问题- 因此,不允许复制(因此按值返回,按值传递).