From 26d0ea4006522fe61cb94fc9fae2c91e0eb86616 Mon Sep 17 00:00:00 2001 From: Jared Hancock Date: Wed, 20 Mar 2024 21:24:24 -0500 Subject: [PATCH] wiznet5k: Add support for read timeouts. Signed-off-by: Jared Hancock --- extmod/network_wiznet5k.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/extmod/network_wiznet5k.c b/extmod/network_wiznet5k.c index e4597fcc32..8000dfdc44 100644 --- a/extmod/network_wiznet5k.c +++ b/extmod/network_wiznet5k.c @@ -576,6 +576,17 @@ static mp_uint_t wiznet5k_socket_send(mod_network_socket_obj_t *socket, const by } static mp_uint_t wiznet5k_socket_recv(mod_network_socket_obj_t *socket, byte *buf, mp_uint_t len, int *_errno) { + if (socket->timeout > 0) { + mp_uint_t start = mp_hal_ticks_ms(); + while (getSn_SR(socket->fileno) == SOCK_ESTABLISHED && getSn_RX_RSR(socket->fileno) == 0) { + if (mp_hal_ticks_ms() - start > socket->timeout) { + *_errno = MP_ETIMEDOUT; + return -1; + } + mp_event_wait_ms(1); + } + } + MP_THREAD_GIL_EXIT(); mp_int_t ret = WIZCHIP_EXPORT(recv)(socket->fileno, buf, len); MP_THREAD_GIL_ENTER(); @@ -619,6 +630,18 @@ static mp_uint_t wiznet5k_socket_sendto(mod_network_socket_obj_t *socket, const static mp_uint_t wiznet5k_socket_recvfrom(mod_network_socket_obj_t *socket, byte *buf, mp_uint_t len, byte *ip, mp_uint_t *port, int *_errno) { uint16_t port2; + + if (socket->timeout > 0) { + mp_uint_t start = mp_hal_ticks_ms(); + while (getSn_SR(socket->fileno) != SOCK_CLOSED && getSn_RX_RSR(socket->fileno) == 0) { + if (mp_hal_ticks_ms() - start > socket->timeout) { + *_errno = MP_ETIMEDOUT; + return -1; + } + mp_event_wait_ms(1); + } + } + MP_THREAD_GIL_EXIT(); mp_int_t ret = WIZCHIP_EXPORT(recvfrom)(socket->fileno, buf, len, ip, &port2); MP_THREAD_GIL_ENTER();