简介
我尝试使用tcp连接创建端口转发示例,因此我需要使用其套接字映射客户端标识。当客户端请求端口转发时,我必须知道谁拥有套接字。
为此,我创建了以下代码:
std::map<std::string, tcp::socket> box_map;
std::map<std::string, tcp::socket>::iterator it;
it = box_map.find(id);
if (it != box_map.end())
return;
else{
box_map.insert(std::pair<std::string, tcp::socket>(id,s));
return;
}
问题
但是我收到了以下错误:
error: use of deleted function ‘boost::asio::basic_stream_socket<boost::asio::ip::tcp>::basic_stream_socket(const boost::asio::basic_stream_socket<boost::asio::ip::tcp>&)’
答案 0 :(得分:1)
tcp::socket
不是可复制构造的。因此,您必须使用emplace
移动套接字来构建新对:
box_map.emplace(id, std::move(s));
或者,你仍然可以使用insert
,然后进入你正在构建的pair
:
box_map.insert(std::make_pair(id, std::move(s)));