Replace net_poll budget with snapshot-based drain: read available bytes once, stop when consumed
This commit is contained in:
@@ -137,10 +137,12 @@ void net_poll(std::span<uint8_t> tx) {
|
|||||||
w6300::irq_pending = false;
|
w6300::irq_pending = false;
|
||||||
w6300::clear_interrupt(w6300::ik_int_all);
|
w6300::clear_interrupt(w6300::ik_int_all);
|
||||||
static uint8_t rx_buf[1518];
|
static uint8_t rx_buf[1518];
|
||||||
int budget = 10;
|
uint16_t available = w6300::get_socket_recv_buf(raw_socket);
|
||||||
while (budget-- > 0 && w6300::get_socket_recv_buf(raw_socket) > 0) {
|
uint16_t consumed = 0;
|
||||||
|
while (consumed < available) {
|
||||||
auto result = w6300::recv(raw_socket, std::span{rx_buf});
|
auto result = w6300::recv(raw_socket, std::span{rx_buf});
|
||||||
if (!result) break;
|
if (!result) break;
|
||||||
|
consumed += *result + 2;
|
||||||
span_writer tx_writer(tx);
|
span_writer tx_writer(tx);
|
||||||
process_frame({rx_buf, *result}, tx_writer);
|
process_frame({rx_buf, *result}, tx_writer);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user