В настоящее время я работаю над приложением, которое требует проверки связи с сетевыми устройствами, чтобы убедиться, что они подключены к сети. Приложению может потребоваться проверка нескольких сотен устройств, поэтому я сделал его многопоточным.
Проблема, которую я получаю, заключается в следующем:
Я пингую 2 IP адреса,
- Поток 1 - пинг IP-адреса 1 - ПК с действующим и существующим IP-адресом
- Поток 2 - ping IP Address 2 - IP, который не существует в частной сети
Сначала я запускаю тему 2. Ping-запросы из этого потока (или хост недоступен), как и ожидалось. Во время работы потока 2 я запускаю поток 1 после небольшой задержки.
В потоке 1 я получаю ответ от IP-адреса 1 (как я должен), но я также получаю ответ от IP-адреса 2 в потоке 2, даже если на этом IP-адресе нет устройства! Ответ от IP-адреса 2 принимается всякий раз, когда получен ответ от IP-адреса. Когда поток 1 спит без проверки связи с IP-адресом 1, поток 2 выдает результаты тайм-аута, как и ожидалось. Ресурс 1 и 2 не используется совместно, и каждый пинг выполняется через отдельный выделенный объект клиента ICMP.
Я считаю, что второй поток видит ответ от IP-адреса 1 и не выясняет, что это не ответ от его собственного запроса проверки связи, но я не могу понять, почему это происходит.
Код ping совпадает с примером ping.cpp, предоставленным в poco-1.9.0 / Net / samples / Ping / src / Ping.cpp.
У кого-нибудь есть идеи или предложения?
Спасибо