C++ Boost ASIO-获取排序的端点(首先是IPv4,然后是IPv6)

C++ Boost ASIO-获取排序的端点(首先是IPv4,然后是IPv6),c++,boost,boost-asio,C++,Boost,Boost Asio,当boost asio(1.42)获得端点时,它可能同时包含IPv4和IPv6 是否可以对端点进行排序(先是v4,然后是v6) boost::asio::ip::tcp::解析器解析器(io\u服务); boost::asio::ip::tcp::解析器::查询查询(主机,boost::词法转换(端口)); boost::asio::ip::tcp::resolver::迭代器端点\u iterator=resolver.resolve(查询); boost::asio::ip::tcp::re

当boost asio(1.42)获得端点时,它可能同时包含IPv4和IPv6

是否可以对端点进行排序(先是v4,然后是v6)

boost::asio::ip::tcp::解析器解析器(io\u服务);
boost::asio::ip::tcp::解析器::查询查询(主机,boost::词法转换(端口));
boost::asio::ip::tcp::resolver::迭代器端点\u iterator=resolver.resolve(查询);
boost::asio::ip::tcp::resolver::iterator end;
/*我希望第一个端点是IPv4,然后是IPv6*/
while(error&&endpoint\u迭代器!=end){
socket.close();
socket.connect(*endpoint_iterator++,error);
}

如果您可以检查类型和性能,而不是您的优先级,或者端点不太多,您可以只做两次,一次只做V4,另一次做v6。 差不多

while (error && endpoint_iterator != end) {
 if(isv4(*endpoint_iterato)){
    socket.close();
    socket.connect(*endpoint_iterator++, error);
 }
}


while (error && endpoint_iterator != end) {
   if(isv6(*endpoint_iterato)){
    socket.close();
    socket.connect(*endpoint_iterator++, error);
   }
}
也检查这个问题的过滤器

while (error && endpoint_iterator != end) {
 if(isv4(*endpoint_iterato)){
    socket.close();
    socket.connect(*endpoint_iterator++, error);
 }
}


while (error && endpoint_iterator != end) {
   if(isv6(*endpoint_iterato)){
    socket.close();
    socket.connect(*endpoint_iterator++, error);
   }
}