132 if (rcv_wnd_update_only)
155 using std::type_index;
189 if (rcv_wnd_update_only)
250 using std::type_index;
258 using std::type_index;
260 const auto type_idx = type_index(type);
261 const size_t idx = delayed_by_pacing ? 1 : 0;
267 size_t size_expected,
size_t size_xferred)
269 using std::numeric_limits;
270 using std::type_index;
272 const auto type_idx = type_index(type);
274 = (size_expected == numeric_limits<size_t>::max())
276 : ((size_expected == size_xferred)
void sent_low_lvl_ack_packet(bool rcv_wnd_update_only)
Indicates than one low-level ACK packet will be sent as soon as possible.
void good_data_accepted_packet(size_t data)
Indicates good_data_packet(), and these data are not dropped (so either delivered into Receive buffer...
void current_pending_to_ack_packets(size_t count)
Indicates that all incoming data in the current boost.asio handler have been scanned and any ACKs tha...
void good_data_dropped_reassembly_q_overflow_packet(size_t data)
Indicates good_data_packet(), but these data are dropped due to insufficient Receive reassembly queue...
void presumed_dropped_data(size_t data)
Indicates that one or more unreceived data packets have been considered Dropped due to the number of ...
void low_lvl_packet(const std::type_info &type, size_t size)
Indicates a Low_lvl_packet& p was received with typeid(p) == type, deserialized from a buffer of leng...
void good_data_delivered_packet(size_t data)
Indicates good_data_accepted_packet(), and these data are delivered into Receive buffer (either immed...
void late_or_dupe_to_send_ack_packet(size_t data)
Indicates that late_or_dupe_data_packet() and therefore an individual acknowledgment for this packet ...
void total_to_send_ack_packet(size_t data)
Indicates that an individual acknowledgment for one packet will be sent.
void total_data_packet(size_t data)
Indicates one DATA packet has been received on socket.
void rcv_wnd_recovery_event_finish(bool success)
Indicates that the recovery indicated by last rcv_wnd_recovery_event_start() call has finished (we ar...
void good_to_send_ack_packet(size_t data)
Indicates that good_data_delivered_packet() and therefore an individual acknowledgment for this packe...
void good_data_packet(size_t data)
Indicates total_data_packet(), and these data are new and acceptable into Receive buffer assuming the...
void sent_individual_ack()
Indicates than one individual acknowledgment of a data packet has been packaged into an ACK packet th...
void error_data_packet(size_t data)
Indicates total_data_packet(), but there is some error about the sequence numbers so that they are no...
const Peer_socket_receive_stats & stats() const
Returns reference to non-modifiable current set of accumulated stats.
void buffer_fed(size_t size)
Indicates the Receive buffer was enqueued with data from network (so its data_size() increased).
void good_data_first_qd_packet(size_t data)
Indicates good_data_accepted_packet(), and these data are, upon receipt, queued for reassembly (not i...
void good_data_dropped_buf_overflow_packet(size_t data)
Indicates good_data_packet(), but these data are dropped due to insufficient Receive buffer space.
void rcv_wnd_recovery_event_start()
Indicates we seem to have detected that our rcv_wnd went from exhaustion to largely free,...
void late_or_dupe_data_packet(size_t data)
Indicates total_data_packet(), but the arrived data have either already been received before or (more...
void received_low_lvl_ack_packet(bool rcv_wnd_update_only)
Indicates an ACK packet on this socket was received.
void idle_timeout()
Indicates an idle timeout (in the send direction) has been detected and indicated to congestion contr...
void drop_timeout()
Indicates a Drop Timer fired once.
void low_lvl_packet_xfer_completed(const std::type_info &type, size_t size_expected=std::numeric_limits< size_t >::max(), size_t size_xferred=0)
Indicates low_lvl_packet_xfer_called(), and that send operation has now reported its outcome by calli...
void error_ack()
Indicates received_ack(), but there is some error about the sequence number so that it is not accepta...
void buffer_fed(size_t size)
Indicates the Send buffer was enqueued with data from a user send*() call (so its data_size() increas...
void updated_rcv_wnd(bool wnd_exhausted)
Indicates an ACK packet has advertised a rcv_wnd and whether this rcv_wnd would allow one to send one...
void received_ack()
Indicates one individual acknowledgment (of a DATA packet) inside an ACK has been received.
void low_lvl_packet_xfer_called(const std::type_info &type, bool delayed_by_pacing, size_t size)
Indicates low_lvl_packet_xfer_requested(), and that packet has now been given to OS UDP stack to actu...
void loss_event()
Indicates a new loss event (not counting Drop Timeouts) has been reported to congestion control (Cong...
void dropped_data(size_t data, size_t count)
Indicates that 1 or more packets have been converted from In-flight to Dropped.
void low_lvl_packet_xfer_requested(const std::type_info &type)
Indicates a packet was given to the sending module to send, possibly subject to pacing.
const Peer_socket_send_stats & stats() const
Returns reference to non-modifiable current set of accumulated stats.
void late_or_dupe_ack()
Indicates received_ack(), but the arrived acknowledgment is for a packet that has either already been...
void data_sent(size_t data, bool rexmission)
Indicates a DATA packet was sent.
void good_ack(size_t data)
Indicates received_ack(), and the arrived acknowledgment properly acknowledged a DATA packet,...
A data store that keeps stats about the outgoing direction of a Peer_socket connection to another Flo...
uint64_t m_sent_rexmitted_data_count
Of m_sent_data_count, the data that were retransmitted (as opposed to original) data.
uint64_t m_remote_rcv_wnd_recovery_events
Number of times m_rcv_wnd_exhausted changed from true (not counting it being initially set to false).
uint64_t m_sent_rexmitted_data_size
Of m_sent_data_size, the data that were retransmitted (as opposed to original) data.
uint64_t m_received_ack_count
Individual acknowledgments inside low-level ACK packets that have been received (not necessarily all ...
size_t m_max_buf_data_size
Maximum number of bytes in the Send buffer so far.
uint64_t m_late_or_dupe_ack_count
Of m_received_ack_count, those packets that had either already been convered from In-flight to Acknow...
uint64_t m_drop_timeouts
Number of times Drop Timer has fired so far.
std::map< std::type_index, boost::array< uint64_t, 2 > > m_low_lvl_packet_xfer_called_size_by_type
Total size in serialized form of low-level packets that were given to OS in a send call,...
uint64_t m_idle_timeouts
Number of idle timeouts (in the send direction) so far that have been detected and indicated to conge...
uint64_t m_loss_events
Number of loss events so far (not counting Drop Timeouts) that have been reported to congestion contr...
uint64_t m_sent_data_size
Total bytes sent in DATA packets.
uint64_t m_sent_data_count
Number of packets sent in DATA packets.
std::map< std::type_index, std::map< Xfer_op_result, uint64_t > > m_low_lvl_packet_xfer_completed_count_by_type_and_result
Of m_low_lvl_packet_xfer_called_count_by_type, the data for which the send completion handler execute...
uint64_t m_good_ack_count
Of m_received_ack_count, those packets that were properly acknowledged and converted from In-flight t...
bool m_rcv_wnd_exhausted
Whether the last rcv_wnd update from other side indicated window size < max-block-size bytes....
uint64_t m_dropped_data_size
Total bytes in sent DATA packets that are considered permanently dropped (i.e., whose status has chan...
uint64_t m_error_acks_data_count
Of m_received_ack_count, those acknowledgments that contained some error about the sequence numbers s...
std::map< std::type_index, uint64_t > m_low_lvl_packet_xfer_requested_count_by_type
Total count of low-level packets that were given to the sending module to be sent,...
uint64_t m_dropped_data_count
Number of sent DATA packets that are considered permanently dropped (i.e., whose status has changed f...
uint64_t m_received_low_lvl_rcv_wnd_only_ack_count
Of m_received_low_lvl_ack_count, the packets that contained no individual acknowledgments but sent on...
uint64_t m_good_ack_data_size
Of the individual acknowledgments covered by m_received_ack_count, the total bytes in the DATA packet...
uint64_t m_received_low_lvl_ack_count
Number of low-level ACK packets received.
std::map< std::type_index, boost::array< uint64_t, 2 > > m_low_lvl_packet_xfer_called_count_by_type
Count of low-level packets that were given to OS in a send call, from this socket,...
std::map< std::type_index, std::map< Xfer_op_result, uint64_t > > m_low_lvl_packet_xfer_completed_size_by_type_and_result
Of m_low_lvl_packet_xfer_called_size_by_type, the data for which the send completion handler executed...
uint64_t m_remote_rcv_wnd_exhaustion_events
Number of times m_rcv_wnd_exhausted changed from false.
Flow module containing the API and implementation of the Flow network protocol, a TCP-inspired stream...
Xfer_op_result
Result of a send or receive operation, used at least in stat reporting.
@ S_FULLY_XFERRED
Bytes transferred equals bytes expected.
@ S_PARTIALLY_XFERRED
Bytes transferred less than bytes expected.
@ S_ERROR
Error occurred – probably no bytes transferred.
A data store that keeps stats about the incoming direction of a Peer_socket connection to another Flo...
uint64_t m_good_data_delivered_size
Of m_good_data_accepted_size, the data that were delivered into Receive buffer (either immediately up...
uint64_t m_rcv_wnd_recovery_success_count
Of m_rcv_wnd_recovery_count, the number of times the recovery was successful: i.e....
uint64_t m_total_data_size
Bytes in DATA packets received on socket.
uint64_t m_good_to_send_acks_data_size
Of m_total_to_send_acks_data_size, the data that also satisfy the criteria in m_good_data_delivered_s...
uint64_t m_good_data_accepted_size
Of m_good_data_size, the data that were not dropped (so either delivered into Receive buffer or queue...
uint64_t m_late_or_dupe_data_size
Of m_total_data_size, the data that had either already been received before or (more likely) had been...
uint64_t m_rcv_wnd_recovery_timeout_count
Of m_rcv_wnd_recovery_count, the number of times the recovery failed: i.e., resulted in a certain len...
uint64_t m_delayed_acks_count
The total number of individual packet acknowledgments whose sending was delayed (via delayed ACK mech...
uint64_t m_good_to_send_acks_count
Of m_total_to_send_acks_count, the data that also satisfy the criteria in m_good_data_delivered_count...
uint64_t m_total_to_send_acks_count
Number of DATA packets acknowledged thus far or that have been received and are pending to be acknowl...
uint64_t m_total_to_send_acks_data_size
Bytes in received DATA packets acknowledged thus far or that have been received and are pending to be...
uint64_t m_good_data_size
Of m_total_data_size, the data that were new and acceptable into Receive buffer assuming there was sp...
uint64_t m_late_or_dupe_data_count
Of m_total_data_count, the data that had either already been received before or (more likely) had bee...
uint64_t m_sent_individual_acks_count
Number of DATA packets such that for a given packet an individual acknowledgment has been packaged in...
size_t m_max_buf_data_size
Maximum number of bytes in the Receive buffer so far.
uint64_t m_sent_low_lvl_acks_count
Number of low-level ACK packets that have been sent or will be sent as soon as possible.
uint64_t m_good_data_delivered_count
Of m_good_data_accepted_count, the data that were delivered into Receive buffer (either immediately u...
std::map< std::type_index, uint64_t > m_low_lvl_packet_count_by_type
Count of low-level packets received targeted at this socket, split up by packet type similarly to m_l...
uint64_t m_late_or_dupe_to_send_acks_data_size
Of m_total_to_send_acks_data_size, the data that also satisfy the criteria in m_late_or_dupe_data_siz...
uint64_t m_total_data_count
Number of DATA packets received on socket.
uint64_t m_good_data_count
Of m_total_data_count, the data that were new and acceptable into Receive buffer assuming there was s...
size_t m_current_pending_acks_count
Of m_total_to_send_acks_count, the packets that have not yet been sent to the sender (pending acknowl...
uint64_t m_sent_low_lvl_rcv_wnd_only_acks_count
Of m_sent_low_lvl_acks_count, the packets that contained no individual acknowledgments but are to be ...
uint64_t m_good_data_first_qd_size
Of m_good_data_accepted_size, the data that were, upon receipt, queued for reassembly (not immediatel...
uint64_t m_error_data_size
Of m_total_data_size, the data that contained some error about the sequence numbers so that they were...
uint64_t m_good_data_dropped_buf_overflow_size
Of m_good_data_size, the data that were dropped due to insufficient Receive buffer space.
uint64_t m_presumed_dropped_data_size
Total number of bytes in hypothetical data packets that have been considered Dropped due to the numbe...
uint64_t m_late_or_dupe_to_send_acks_count
Of m_total_to_send_acks_count, the data that also satisfy the criteria in m_late_or_dupe_data_count.
uint64_t m_good_data_accepted_count
Of m_good_data_count, the data that were not dropped (so either delivered into Receive buffer or queu...
uint64_t m_good_data_dropped_reassembly_q_overflow_size
Of m_good_data_size, the data that were dropped due to insufficient Receive reassembly queue space (o...
uint64_t m_error_data_count
Of m_total_data_count, the data that contained some error about the sequence numbers so that they wer...
uint64_t m_rcv_wnd_recovery_count
Number of times we detected (heuristically but fairly reliably) that the following event occurred: ou...
uint64_t m_good_data_dropped_reassembly_q_overflow_count
Of m_good_data_count, the data that were dropped due to insufficient Receive reassembly queue space (...
uint64_t m_good_data_first_qd_count
Of m_good_data_accepted_count, the data that were, upon receipt, queued for reassembly (not immediate...
uint64_t m_good_data_dropped_buf_overflow_count
Of m_good_data_count, the data that were dropped due to insufficient Receive buffer space.
std::map< std::type_index, uint64_t > m_low_lvl_packet_size_by_type
Total size in serialized form of low-level packets received targeted at this socket,...