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

米哈尔·韦戈瑞克

当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);
}
路易斯·泰勒斯

如果您可以检查类型和性能而不是您的优先级或没有太多的端点,则可以只进行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);
   }
}

也检查此问题的过滤器

使用boost asio枚举我的卡的ipv4和ipv6地址

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章