android上用c进行traceroute命令开发时候,为何收不到超时报文??

android上用c进行traceroute命令开发时候,为何收不到超时报文??
1前提:创建socket:socket(AF_INET, SOCK_DGRAM, IPPROTO_ICMP)
2.现象:按照默认在该socket上可以正常发送请求报文并收到回应报文。

         但为了实现了traceroute所以设置ttl为1、2、3、4....时候发送请求报文,这个时候应该会收到超时报文,来获取经过路由的地址。但我程序recvfrom收不到这个超时报文一直阻塞,但用wireshark可以抓到这个超时报文,为何我程序就不能收到???是谁给我把这个超时报文过滤掉了????
                    麻烦哪位大神给与答复????在线等

因为 sock_dgram 不能像sock_raw一样接收所有数据包。
举个例子,当TTL = 1的时候,收到了中途的addr 发送的超时报文,recvfrom( ) 只接收目的地址的addr的数据报文,
当接收到超时报文后,就把这个报文丢弃了,所以你会一直阻塞,可以使用SOCKET_RAW解决这个问题