Is poco ping threadsafe

Is poco ping threadsafe

本文关键字:threadsafe ping poco Is      更新时间:2023-10-16

我目前正在开发一个应用程序,该应用需要需要ping网络设备以检查它们在线。该应用程序可能必须检查几百个设备,因此我将其制造为多线程应用程序。

我遇到的问题是:

我正在ping 2 IP地址,

  1. 线程1- PING IP地址1-有效和现有IP地址的PC
  2. 线程2- ping ip地址2-专用网络上不存在的IP

我首先启动线程2。ping从此线程超时(或主机无法到达)中请求,如预期的。当线程2正在运行时,我在小延迟后启动线程1。

在线程1上,我从IP地址1获得了响应(如我应该),但是即使此IP地址上没有设备,我也从IP地址2上获得了响应!每当收到IP地址的响应时,就会收到IP地址2的响应。当线程1不ping ping IP地址1睡觉时,线程2会根据预期产生超时结果。线程1和线程2之间没有共享资源,并且每个ping都是通过单个专用的ICMP客户端对象完成的。

我相信第二个线程是从IP地址1中看到的响应,而不是从其自己的ping请求中响应,但我不知道为什么会发生。

ping代码与poco-1.9.0/net/samples/ping/ping/src/ping.cpp中提供的示例ping.cpp相同。

有人有任何想法或建议吗?

谢谢

ICMP协议中没有任何东西可以允许网络堆栈确定要路由哪个接收套接字的ICMP数据包。您需要在发送的每个数据包中添加标识符,并进行一些书籍,以确保您的代码将其路由到正确的线程。

您有多个可以发送数据包的线程,但是您可能只需要一个线程接收数据包并将其派遣到正确的线程或向所有线程发送到所有线程,并且让每个线程决定是否基于其发送时添加的标识符是相关的数据包。