   Socket* sock = ethernet.socket(Socket::IPRAW, IPPROTO_ICMP);
   ASSERT(sock != NULL);
 
-  INFO("Build ICMP echo request block", 0);
+  INFO("Build ICMP echo request block", 0); trace.flush();
   icmphdr req;
   static uint16_t seq = 0;
   req.type = ICMP_ECHO;

  if (INET::checksum(&reply, sizeof(reply)) != 0) goto error;

  // Calculate the time for the ping roundtrip
  roundtrip -= reply.timestamp;
  INFO("Roundtrip: %ul us", roundtrip);

 error:
  sock->close();

  int res = sock->send(&req, sizeof(req), dest, 0);
  if (res < 0) goto error;

  // Wait for the reply
  const static uint8_t RETRY_MAX = 16;
  uint32_t stop;
  icmphdr reply;
  uint8_t src[4];
  uint16_t port;
  for (uint8_t retry = 0; retry < RETRY_MAX; retry++) {
    if ((res = sock->available()) > 0) break;
    delay(1);
  }

  // Check size of reply before actually recieving
  if (res != sizeof(reply) + sizeof(IPRAW_HEADER)) goto error;
  res = sock->recv(&reply, sizeof(reply), src, port);
  stop = RTC::micros();
  INFO("Receive the reply", 0);

  // Sanity check the reply; right size, type, id, seq nr, and checksum
  if (res != sizeof(reply)) goto error;
