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)