From a2fd382c34ad9ccca3bf9f0b6ca8c42db7ea6282 Mon Sep 17 00:00:00 2001 From: Jared Hancock Date: Mon, 7 Nov 2022 11:21:27 -0600 Subject: [PATCH] extmod/modlwip: Use actual errno in exception for error in listen. The actual underlying error number raised from the lwIP subsystem when attempting to listen on a socket is swallowed and replaced with an out-of-memory error which is confusing. This commit passes the underlying error message from the lwIP subsystem to the appropriate OSError exception. --- extmod/modlwip.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/extmod/modlwip.c b/extmod/modlwip.c index f64a5a6250..734722f83a 100644 --- a/extmod/modlwip.c +++ b/extmod/modlwip.c @@ -931,9 +931,20 @@ STATIC mp_obj_t lwip_socket_listen(size_t n_args, const mp_obj_t *args) { mp_raise_OSError(MP_EOPNOTSUPP); } - struct tcp_pcb *new_pcb = tcp_listen_with_backlog(socket->pcb.tcp, (u8_t)backlog); + struct tcp_pcb *new_pcb; + #if LWIP_VERSION_MACRO < 0x02000100 + new_pcb = tcp_listen_with_backlog(socket->pcb.tcp, (u8_t)backlog); + #else + err_t error; + new_pcb = tcp_listen_with_backlog_and_err(socket->pcb.tcp, (u8_t)backlog, &error); + #endif + if (new_pcb == NULL) { + #if LWIP_VERSION_MACRO < 0x02000100 mp_raise_OSError(MP_ENOMEM); + #else + mp_raise_OSError(error_lookup_table[-error]); + #endif } socket->pcb.tcp = new_pcb;