Is poco ping threadsafe
Is poco ping threadsafe
我目前正在开发一个应用程序,该应用需要需要ping网络设备以检查它们在线。该应用程序可能必须检查几百个设备,因此我将其制造为多线程应用程序。
我遇到的问题是:
我正在ping 2 IP地址,
- 线程1- PING IP地址1-有效和现有IP地址的PC
- 线程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数据包。您需要在发送的每个数据包中添加标识符,并进行一些书籍,以确保您的代码将其路由到正确的线程。
您有多个可以发送数据包的线程,但是您可能只需要一个线程接收数据包并将其派遣到正确的线程或向所有线程发送到所有线程,并且让每个线程决定是否基于其发送时添加的标识符是相关的数据包。
相关文章:
- 我用C++,icmp制作了Ping程序.但它不适用于安卓
- GCC 仍然使用 -fno-threadsafe-static 生成保护变量
- Is poco ping threadsafe
- OpenGL Ping Pong可与一张通行证一起工作,而不是两个通行证
- 如何使用ACE在同一本地网络中ping另一个PC
- 带有信号的ThreadSafe Singleton的问题
- 如何使用QProcess通过Ping检测"Network is Unreachable"?
- Qt QProccess with ping utility usage
- 使用Boost的半并发ICMP ping.Asio在Windows上
- C++ Boost.asio Ping
- Magick++ API 和 ping(不是网络 ping)的示例
- 尝试ping时出现Boost异常
- 如何使用 c++ 对 php 页面进行 ping 操作
- ping 本地网络地址的最快方法
- 提升 ping 示例
- 等待ping命令响应时出现Q消息
- Ping网络并获取mac地址
- Is CWnd::GetSafeHwnd() and CWnd::m_hWnd ThreadSafe?
- FPS游戏ping实现
- Linux中具有ping操作的Qt线程