title: Ping.Send(ip, timeout) in .Net returns too fast and complains on timeout
body: <p>I'm using this method repeatedly in order to monitor connection to machine in the local network. When same test is done from cmd, results are steady and consistent:</p>
  
  <pre><code>C:\Windows\system32&gt;ping -t 192.168.11.12
  
  Pinging 192.168.11.12 with 32 bytes of data:
  Reply from 192.168.11.12: bytes=32 time=1ms TTL=126
  Reply from 192.168.11.12: bytes=32 time=1ms TTL=126
  </code></pre>
  
  <p>But when running from C# with 500 ms timeout it occasionally fails even before the timeout can expire:</p>
  
  <pre class="lang-cs prettyprint-override"><code>public void TestIpAnswersPing()
  {
      var ip = "192.168.11.12";
      var timeout = TimeSpan.FromMilliseconds(500);
  
      var p = new Ping();
  
      foreach (var i in Enumerable.Range(0, 1000))
      {
          var start = DateTime.Now;
          PingReply reply = p.Send(ip, (int)timeout.TotalMilliseconds);
  
          if(reply.Status != IPStatus.Success)
          {
              Debug.Assert(DateTime.Now - start &gt;= timeout);
          }
      }
  }
  </code></pre>
  
  <p>If I change timeout to 1 sec - all pass successfully with average time of pings 0.9 ms.</p>
  
  <p>The only similar thing I have found is this - <a href="http://support.microsoft.com/kb/2533627" rel="noreferrer">http://support.microsoft.com/kb/2533627</a>, which doesn't help much.</p>
  
  <p>Why this might happen and how to monitor high rate connection?</p>