This commit is contained in:
Chris Miles
2025-05-17 23:27:46 -05:00
parent 3d67557f6f
commit 345f402242
2 changed files with 56 additions and 24 deletions
+54 -24
View File
@@ -1130,7 +1130,9 @@ void EQ::Net::DaybreakConnection::ProcessResend(int stream)
auto now_ms = std::chrono::duration_cast<std::chrono::milliseconds>(now.time_since_epoch()).count(); auto now_ms = std::chrono::duration_cast<std::chrono::milliseconds>(now.time_since_epoch()).count();
auto first_sent_ms = std::chrono::duration_cast<std::chrono::milliseconds>(first_packet.first_sent.time_since_epoch()).count(); auto first_sent_ms = std::chrono::duration_cast<std::chrono::milliseconds>(first_packet.first_sent.time_since_epoch()).count();
LogNetClient( LogNetClient(
"Closing connection time_since_first_sent [{}] >= m_owner->m_options.resend_timeout [{}] now [{}] first_packet.first_sent [{}]", "Closing connection for m_endpoint [{}] m_port [{}] time_since_first_sent [{}] >= m_owner->m_options.resend_timeout [{}] now [{}] first_packet.first_sent [{}]",
m_endpoint,
m_port,
time_since_first_sent, time_since_first_sent,
m_owner->m_options.resend_timeout, m_owner->m_options.resend_timeout,
now_ms, now_ms,
@@ -1139,41 +1141,61 @@ void EQ::Net::DaybreakConnection::ProcessResend(int stream)
Close(); Close();
return; return;
} }
if (m_last_ack - now > std::chrono::milliseconds(1000)) {
LogNetClient(
"Resetting m_acked_since_last_resend flag for m_endpoint [{}] m_port [{}]",
m_endpoint,
m_port
);
m_acked_since_last_resend = true;
}
// make sure that the first_packet in the list first_sent time is within the resend_delay and now
// if it is not, then we need to resend all packets in the list
if (time_since_first_sent <= first_packet.resend_delay && !m_acked_since_last_resend) {
LogNetClient(
"Not resending packets for m_endpoint [{}] m_port [{}] packets [{}] time_first_sent [{}] resend_delay [{}] m_acked_since_last_resend [{}]",
m_endpoint,
m_port,
s->sent_packets.size(),
time_since_first_sent,
first_packet.resend_delay,
m_acked_since_last_resend
);
return;
}
} }
if (LogSys.IsLogEnabled(Logs::Detail, Logs::Netcode)) { if (LogSys.IsLogEnabled(Logs::General, Logs::NetClient)) {
size_t total_size = 0; size_t total_size = 0;
for (auto &e: s->sent_packets) { for (auto &e: s->sent_packets) {
total_size += e.second.packet.Length(); total_size += e.second.packet.Length();
} }
LogNetClient( LogNetClient(
"Resending packets for stream [{}] packet count [{}] total packet size [{}]", "Resending packets for m_endpoint [{}] m_port [{}] packet count [{}] total packet size [{}] m_acked_since_last_resend [{}]",
stream, m_endpoint,
m_port,
s->sent_packets.size(), s->sent_packets.size(),
total_size total_size,
m_acked_since_last_resend
); );
} }
LogNetClient("Resending packets for stream [{}] packet count [{}] total packet size [{}]",
stream,
s->sent_packets.size(),
m_resend_bytes_sent
);
for (auto &e: s->sent_packets) { for (auto &e: s->sent_packets) {
// if (m_resend_packets_sent >= MAX_CLIENT_RECV_PACKETS_PER_WINDOW || if (m_resend_packets_sent >= MAX_CLIENT_RECV_PACKETS_PER_WINDOW ||
// m_resend_bytes_sent >= MAX_CLIENT_RECV_BYTES_PER_WINDOW) { m_resend_bytes_sent >= MAX_CLIENT_RECV_BYTES_PER_WINDOW) {
// LogNetClient( LogNetClient(
// "Stopping resend because we hit thresholds m_resend_packets_sent [{}] max [{}] in_queue [{}] m_resend_bytes_sent [{}] max [{}]", "Stopping resend because we hit thresholds m_resend_packets_sent [{}] max [{}] in_queue [{}] m_resend_bytes_sent [{}] max [{}]",
// m_resend_packets_sent, m_resend_packets_sent,
// MAX_CLIENT_RECV_PACKETS_PER_WINDOW, MAX_CLIENT_RECV_PACKETS_PER_WINDOW,
// s->sent_packets.size(), s->sent_packets.size(),
// m_resend_bytes_sent, m_resend_bytes_sent,
// MAX_CLIENT_RECV_BYTES_PER_WINDOW MAX_CLIENT_RECV_BYTES_PER_WINDOW
// ); );
// break; break;
// } }
auto &sp = e.second; auto &sp = e.second;
auto &p = sp.packet; auto &p = sp.packet;
@@ -1203,11 +1225,13 @@ void EQ::Net::DaybreakConnection::ProcessResend(int stream)
m_owner->m_options.resend_delay_max m_owner->m_options.resend_delay_max
); );
} }
m_acked_since_last_resend = false;
m_last_ack = now;
} }
void EQ::Net::DaybreakConnection::Ack(int stream, uint16_t seq) void EQ::Net::DaybreakConnection::Ack(int stream, uint16_t seq)
{ {
auto now = Clock::now(); auto now = Clock::now();
auto s = &m_streams[stream]; auto s = &m_streams[stream];
auto iter = s->sent_packets.begin(); auto iter = s->sent_packets.begin();
@@ -1228,6 +1252,9 @@ void EQ::Net::DaybreakConnection::Ack(int stream, uint16_t seq)
++iter; ++iter;
} }
} }
m_acked_since_last_resend = true;
m_last_ack = now;
} }
void EQ::Net::DaybreakConnection::OutOfOrderAck(int stream, uint16_t seq) void EQ::Net::DaybreakConnection::OutOfOrderAck(int stream, uint16_t seq)
@@ -1245,6 +1272,9 @@ void EQ::Net::DaybreakConnection::OutOfOrderAck(int stream, uint16_t seq)
s->sent_packets.erase(iter); s->sent_packets.erase(iter);
} }
m_acked_since_last_resend = true;
m_last_ack = now;
} }
void EQ::Net::DaybreakConnection::UpdateDataBudget(double budget_add) void EQ::Net::DaybreakConnection::UpdateDataBudget(double budget_add)
+2
View File
@@ -185,6 +185,8 @@ namespace EQ
// resend tracking // resend tracking
size_t m_resend_packets_sent = 0; size_t m_resend_packets_sent = 0;
size_t m_resend_bytes_sent = 0; size_t m_resend_bytes_sent = 0;
bool m_acked_since_last_resend = false;
Timestamp m_last_ack;
struct DaybreakSentPacket struct DaybreakSentPacket
{ {