|
|
我的思路是单线程的ping是好实现的,那么我开N个线程,每个线程都执行这样一个流程
初始化 socket() sendto() select() recvfrom() 结束
但是,有这样一个情况。
s1 s2两个sock分别属于A、B两个线程,
s1会收到回应s2的ICMP回应数据包
我猜想 ICMP是在IP层上的,没有端口,无法多路复用,无法区分是属于哪个sock的数据
我想若把每个发送ICMP数据包的ID域填入当前发送线程的ID号,每个线程都在接收回应数据包,通过比较ID号来判断接收的数据包是否是此线程发送的回应,若是就进行下步操作,不是就丢弃.但这里有个问题:一个线程丢弃一个不是他的回应数据包后,这个被丢弃的数据包时候能被其他线程接收到?(当然包括要正确接收这个回应数据包的线程),若一个线程丢弃了一个数据包后其他线程接受不到,那么不就造成了一个线程的回应数据包丢失吗?
所以我想请教各位高手,多线程ping各位的实现思路是怎么样的 |
|