मैं localhost
एक बार हर 5 सेकंड पर boost::asio::ip::tcp::resolver::resolve()
लागू एक डिब्बा बंद प्रतिलिपि प्रस्तुत की है। यह वापस किए गए एंडपॉइंट्स की संख्या की गणना करता है और पिछले पुनरावृत्ति के विरुद्ध उस मान की तुलना करता है।परिणाम Boost.Asio समाधानकर्ता से अलग
#include <boost/asio.hpp>
#include <iostream>
int main(int argc, char *argv[])
{
if (argc < 3) {
std::cerr << argv[0] << " host port" << std::endl;
exit(EXIT_FAILURE);
}
const char* host = argv[1];
const char* service = argv[2];
boost::asio::io_service io_service;
boost::asio::ip::tcp::resolver resolver(io_service);
size_t previous = 0;
while (true) {
boost::asio::ip::tcp::resolver::iterator i(
resolver.resolve(
boost::asio::ip::tcp::resolver::query(host, service)
)
);
size_t count(0);
while (i != boost::asio::ip::tcp::resolver::iterator()) {
std::cout << i->endpoint() << std::endl;
++i;
++count;
}
std::cout << "got " << count << " addresses" << std::endl;
if (previous == 0) {
previous = count;
}
assert(count == previous);
sleep(5);
}
}
नमूना सत्र
~> time ./addrinfo_asio localhost 80
...
127.0.0.1:80
got 1 addresses
[::1]:80
127.0.0.1:80
got 2 addresses
addrinfo_asio: addrinfo_asio.cc:35: int main(int, char**): Assertion `count == previous' failed.
Aborted (core dumped)
real 216m20.515s
user 0m0.181s
sys 0m0.193s
~>
आप इसे लगभग 3.5 घंटे के लिए एक अंत बिंदु (127.0.0.1:80) में पाया गया, तो पाया देख सकते हैं दो (127.0.0.1:80 और [:: 1] : 80)। मुझे आश्चर्य है कि
- एंडपॉइंट गिनती एक से दो में क्यों बदलती है?
- इसका कारण क्या हो सकता है?
आईपीवी 4 और आईपीवी 6 पते दोनों को हल करना जानबूझकर है, मैं क्वेरी को केवल ipv4 तक सीमित नहीं करना चाहता हूं। मुझे एहसास है कि यह व्यवहार संभवतः एएसओ के लिए विशिष्ट नहीं है, मेरे पास एक प्रजननकर्ता भी getaddrinfo
का आह्वान करता है जो एक ही व्यवहार को प्रदर्शित करता है। मेरा प्लेटफॉर्म पीपीसी 64 आरएचईएल 6.2 है यदि यह प्रासंगिक है। मैंने कहीं और पुन: उत्पन्न करने की कोशिश नहीं की है।
':: 1' पता आईपीवी 6 लोकलहोस्ट पता है। शायद ओएस को यह महसूस करने में काफी समय लगता है कि आईपीवी 6 सक्षम है? –
ओएस आप क्या चल रहे हैं? – gda2004
@ gda2004 सवाल का अंतिम वाक्य देखते हैं, ppc64 RHEL 6.2 –