Вызов 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, Но это не следует за поведением, которое я предполагаю.

У меня есть два вопроса об этом:

  1. Это ошибка или нет?
  2. Если это не ошибка, то, что решение для вызова on_service_resolve только дважды?

большое спасибо

0 ответов

Другие вопросы по тегам