On 12/9/2015 9:44 AM, Rob McKenna wrote: > The intention of the 2nd revision of the fix is to make the undocumented > 1000ms problem a non issue. > > If a user calls this function with a timeout of 200ms that timeout is > automatically substituted for 1000ms in the IcmpSendEcho call. Once the > response is received its RTT is checked to make sure it is lower than > 200ms. If not the method returns false. > OK. It makes sense to me.
Thanks, Xuelei > That being the case though the call could potentially take up to 1000ms > to complete where a host is not reachable even though a smaller timeout > is specified. The return value of isReachable() will correctly say > whether the host was reachable or not within the actual timeout > specified by the user however. > > In order to avoid the older (and less reliable) way of testing > reachability I feel that this small corner case is a worthwhile tradeoff. > > -Rob > > On 09/12/15 01:31, Xuelei Fan wrote: >> Is it nice to say in the spec that it is not reliable if the timeout is >> too small? At least 1000ms timeout by default may be not acceptable in >> some circumstances. >> >> Xuelei >> >> On 12/9/2015 12:31 AM, Rob McKenna wrote: >>> Testing has shown that when a timeout < 1000ms is specified the >>> IcmpSendEcho calls fail (apparently) randomly. Once the timeout is >>> 1000ms or greater it works as expected. Therefore I've updated the fix >>> to use 1000ms as a minimum. The existing logic ensures that the ttl is >>> less than the specified timeout in any case: >>> >>> http://cr.openjdk.java.net/~robm/8143397/webrev.02/ >>> >>> -Rob >>> >>> On 01/12/15 14:59, Rob McKenna wrote: >>>> It appears that there is an undocumented minimum timeout in the >>>> IcmpSendEcho* functions. If the timeout parameter is set to a number >>>> below this minimum timeout it is effectively ignored. Thus if you >>>> wanted >>>> to ensure that you could ping a particular host within a certain >>>> timeout >>>> less than the undocumented minimum, you could potentially receive a >>>> false positive. (i.e. if you set the timeout to 20ms but the ping takes >>>> 30ms, IcmpSendEcho will still succeed) >>>> >>>> The following fix checks the icmp reply packet and compares the round >>>> trip time to the requested timeout parameter before deciding whether >>>> the >>>> call was successful or not: >>>> >>>> http://cr.openjdk.java.net/~robm/8143397/webrev.01/ >>>> >>>> -Rob >>