好的傳球,這是我當前的代碼片段:周圍的boost ::支持ASIO :: IP :: TCP ::插座
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";
}
}
應返回上一個port
連接boost::asio::ip::tcp::socket
到hostname
。不過,我得到了一大堆難以理解的boost::noncopyable
錯誤。但是我的問題是,那麼我應該怎樣通過這些套接字呢?這有什麼問題?
我以前從來沒有用過'share_ptr',像這樣? 'boost :: shared_ptr tcp_connect(std :: string hostname,std :: string port)' –
orlp
2011-03-24 21:27:27
'boost :: shared_ptr tcp_connect(... 。)'然後'boost :: shared_ptr 套接字(new bai :: tcp :: socket(io_service));' –
Erik
2011-03-24 21:28:43
好吧,那有效。這意味着我必須將'socket.some_method()'的每個實例更改爲'(* socket).some_method()'? – orlp 2011-03-24 21:37:26