Sending Packets

  • Parameters:
    • SND Period (microseconds): delay between sending packets

    • RTO Period (microseconds): override of EXP timer calculations

    • Congestion Window (packets): size of the current congestion window

  • Timers:
    • QDeadlineTimer _SNDtimer;

    • QDeadlineTimer _EXPtimer;

    • QDeadlineTimer _ACK2SentTimer; // if an ACK2 packet has recently sent, wait SYN before sending another one

    • QElapsedTimer _lastReceiveTime; // the last time we’ve heard something from the remote system

  • Stores:
    • PacketIDSet _sendLossList; // loss list

    • MessageEntryList _pendingMessages; // the list of messages queued but not yet sent

    • ReceivedPacketList _receivedPacketList; // list of packets we have not yet processed

    • SendPacketEntryMap _sendPktPend; // list of packets that have been sent but not yet acknowledged

    • SendMessageEntryPointer _msgPartialSend; // when a message can only partially fit in a packet, this is the remainder

  • Counters:
    • PacketID _sendPacketID; // the current packet sequence number

    • MessageNumber _messageSequence; // the current message sequence number

    • unsigned _expCount{ 1 }; // number of continuous EXP timeouts.

    • PacketID _lastAckPacketID; // largest packetID we’ve received an ACK from

    • ACKSequence _sentAck2; // largest ACK2 packet we’ve sent

    • unsigned _flowWindowSize{ 16 }; // negotiated maximum number of unacknowledged packets (in packets)