当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);
}
答案 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