提升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);
}

如果你能检查类型和性能——这不是你的首要任务,或者没有太多端点,你只需要做两次whiles,其中一次只做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地址

相关内容

最新更新