From 2e80b8437b58e44ffcf51162997e9b13cdfce58c Mon Sep 17 00:00:00 2001 From: Abe Kabakoff Date: Sat, 18 Jul 2026 17:51:18 +0200 Subject: [PATCH] fix: check recvsize before nonblocking mode in TCP recv() (AUD-004) In the non-IPv6 W5500 path, socket.c:687-692 checked nonblocking mode before checking recvsize != 0. A nonblocking TCP socket returned SOCK_BUSY even when RX data was available, so the RX pointer never advanced and retries could not drain the socket. Fix: swap the two checks so recvsize != 0 is evaluated first, matching the ordering already used by the IPv6 branch at lines 679-685. --- Ethernet/socket.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Ethernet/socket.c b/Ethernet/socket.c index 4f6ee50..778dba1 100644 --- a/Ethernet/socket.c +++ b/Ethernet/socket.c @@ -684,12 +684,12 @@ int32_t recv(uint8_t sn, uint8_t * buf, uint16_t len) { //lihan return SOCK_BUSY; } #else - if (sock_io_mode & (1 << sn)) { - return SOCK_BUSY; - } if (recvsize != 0) { break; } + if (sock_io_mode & (1 << sn)) { + return SOCK_BUSY; + } #endif }; #if _WIZCHIP_ == 5300