Вызов serviceResolved для конкретной услуги постепенно увеличивается в Poco DNSSD
У меня есть основной код, как показано ниже
dnssd_responder.start();
dnssd_responder.browser().serviceFound += Poco::delegate(on_service_found);
dnssd_responder.browser().serviceResolved += Poco::delegate(on_service_resolved);
Poco::DNSSD::Service service("_test._udp", 3000);
dnssd_responder.browse().browse("_test._udp", "local");
auto service_handle = dnssd_responder.registerService(service);
std::this_thread::sleep_for(3s);
dnssd_responder.unregisterService(service_handle);
service_handle = dnssd_responder.registerService(service);
dnssd_responder.unregisterService(service_handle);
и у меня есть простая реализация для обработчиков событий, как показано ниже
void on_service_found(const void* sender, const Poco::DNSSD::DNSSDBrowser::ServiceEventArgs& arguments)
{
reinterpret_cast<Poco::DNSSD::DNSSDBrowser*>(const_cast<void*>(sender))->resolve(arguments.service));
}
void on_service_resolved(const void* sender, const Poco::DNSSD::DNSSDBrowser::ServiceEventArgs& arguments)
{
static int a = 0;
std::cout << "number of on service resolved calls: " << ++a << std::endl;
}
Я ожидаю, что после запуска программы я вижу 2
строка и последняя a
равно 2
, а я вижу 3
строка и последняя a
равно 3
,
Я думаю, что проблема решателя работает в фоновом режиме непрерывно, для каждого on_service_found
позвонил и не останавливается после нового resolve
называется. Тем не менее, документация resolve
Метод в файле DNSSDBrowser.h говорит: "После того, как событие serviceResolved или resolError было запущено, повторный просмотр BrowseHandle больше не действителен", поэтому я думаю, resolve
будет остановлен после пожара serviceResolved
, Но это не следует за поведением, которое я предполагаю.
У меня есть два вопроса об этом:
- Это ошибка или нет?
- Если это не ошибка, то, что решение для вызова
on_service_resolve
только дважды?
большое спасибо