code: def receive_one_ping(self, current_socket):
          
          timeout = self.timeout / 1000.0
  
          while True: # Loop while waiting for packet or timeout
              select_start = default_timer()
              inputready, outputready, exceptready = select.select([current_socket], [], [], timeout)
              select_duration = (default_timer() - select_start)
              if inputready == []: # timeout
                  return None, 0, 0, 0, 0
  
              receive_time = default_timer()
  
              packet_data, address = current_socket.recvfrom(ICMP_MAX_RECV)
  
              icmp_header = self.header2dict(
                  names=[
                      "type", "code", "checksum",
                      "packet_id", "seq_number"
                  ],
                  struct_format="!BBHHH",
                  data=packet_data[20:28]
              )
  
              if icmp_header["packet_id"] == self.own_id: # Our packet
                  ip_header = self.header2dict(
                      names=[
                          "version", "type", "length",
                          "id", "flags", "ttl", "protocol",
                          "checksum", "src_ip", "dest_ip"
                      ],
                      struct_format="!BBHHHBBHII",
                      data=packet_data[:20]
                  )
                  packet_size = len(packet_data) - 28
                  ip = socket.inet_ntoa(struct.pack("!I", ip_header["src_ip"]))
                  # XXX: Why not ip = address[0] ???
                  return receive_time, packet_size, ip, ip_header, icmp_header
  
              timeout = timeout - select_duration
              if timeout <= 0:
                  return None, 0, 0, 0, 0
docs: Receive the ping from the socket. timeout = in ms.