def receive_one_ping(mySocket, myID, timeout):
    """
    Receive the ping from the socket. Timeout = in ms
    """
    timeLeft = timeout/1000

    while True: # Loop while waiting for packet or timeout
        startedSelect = default_timer()
        whatReady = select.select([mySocket], [], [], timeLeft)
        howLongInSelect = (default_timer() - startedSelect)
        if whatReady[0] == []: # Timeout
            return None, 0, 0, 0, 0

        timeReceived = default_timer()

        recPacket, addr = mySocket.recvfrom(ICMP_MAX_RECV)

        ipHeader = recPacket[:20]
        iphVersion, iphTypeOfSvc, iphLength, \
        iphID, iphFlags, iphTTL, iphProtocol, \
        iphChecksum, iphSrcIP, iphDestIP = struct.unpack(
            "!BBHHHBBHII", ipHeader
        )

        icmpHeader = recPacket[20:28]
        icmpType, icmpCode, icmpChecksum, \
        icmpPacketID, icmpSeqNumber = struct.unpack(
            "!BBHHH", icmpHeader
        )

        if icmpPacketID == myID: # Our packet
            dataSize = len(recPacket) - 28
            #print (len(recPacket.encode()))
            return timeReceived, (dataSize+8), iphSrcIP, icmpSeqNumber, iphTTL

        timeLeft = timeLeft - howLongInSelect
        if timeLeft <= 0:
            return None, 0, 0, 0, 0
def receive_one_ping ( mySocket , myID , timeout ) : timeLeft = timeout / 1000 while True : startedSelect = default_timer ( ) whatReady = select . select ( [ mySocket ] , [ ] , [ ] , timeLeft ) howLongInSelect = ( default_timer ( ) - startedSelect ) if whatReady [ 0 ] == [ ] : return None , 0 , 0 , 0 , 0 timeReceived = default_timer ( ) recPacket , addr = mySocket . recvfrom ( ICMP_MAX_RECV ) ipHeader = recPacket [ : 20 ] iphVersion , iphTypeOfSvc , iphLength , iphID , iphFlags , iphTTL , iphProtocol , iphChecksum , iphSrcIP , iphDestIP = struct . unpack ( "!BBHHHBBHII" , ipHeader ) icmpHeader = recPacket [ 20 : 28 ] icmpType , icmpCode , icmpChecksum , icmpPacketID , icmpSeqNumber = struct . unpack ( "!BBHHH" , icmpHeader ) if icmpPacketID == myID : dataSize = len ( recPacket ) - 28 return timeReceived , ( dataSize + 8 ) , iphSrcIP , icmpSeqNumber , iphTTL timeLeft = timeLeft - howLongInSelect if timeLeft <= 0 : return None , 0 , 0 , 0 , 0
Receive the ping from the socket. Timeout = in ms