提升ASIO - 获取已排序的端点(首先是IPv4然后是IPv6)

时间:2013-11-19 17:56:54

标签: c++ boost boost-asio

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

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

boost::asio::ip::tcp::resolver resolver(io_service);
boost::asio::ip::tcp::resolver::query query(host, boost::lexical_cast<std::string>(port));
boost::asio::ip::tcp::resolver::iterator endpoint_iterator = resolver.resolve(query);
boost::asio::ip::tcp::resolver::iterator end;

/* I WANT FIRST ENDPOINTS TO BE IPv4, THEN  IPv6 */
while (error && endpoint_iterator != end) {
    socket.close();
    socket.connect(*endpoint_iterator++, error);
}

1 个答案:

答案 0 :(得分:3)

如果你可以检查它的类型和性能不是你的优先级,或者没有太多的端点,你可以只做2个,而在一个中只做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);
   }
}

检查此过滤器的问题

enumerating ipv4 and ipv6 address of my cards using boost asio