IcmpSendEcho2实现Ping
最近需要实现的功能涉及或者某个网关的Ping值,但是如果使用Boost实现的话,在window 7操作系统下,由于权限的原因,创建raw socket会产生异常。所以,在windows 7操作系统下,只能通过IcmpSendEcho2这个函数来获得Ping值。关于这个函数的用法,可以参考MSDN来查看。
下面是一些开发中遇到的一些问题的总结:
1. SendData必须大于12字节,否则就会遇到IP_BUF_TOO_SMALL错误。
2. 设置TTL可以采用以下代码,然后把ip_iption传入就可以,如果不限定TTL的话,设置255;如果限定TTL的话,调用的结果是IP_TTL_EXPIRED_TRANSIT,这个是正确的。
IP_OPTION_INFORMATION ip_option; memset(&ip_option, 0, sizeof(ip_option)); ip_option.Ttl = 255;
3. 这个函数是可以有异步方式的,如果使用同步的话,网络不好就会阻塞,所以在调用这个API的时候,可以新建一个线程来调用。
近期评论