diff --git a/components/sock_utils/include/gai_strerror.h b/components/sock_utils/include/gai_strerror.h index ad872b982..f65601d01 100644 --- a/components/sock_utils/include/gai_strerror.h +++ b/components/sock_utils/include/gai_strerror.h @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: 2024 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2024-2025 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ @@ -18,13 +18,14 @@ extern "C" { #endif /** -* @brief Returns a numeric string representing of `getaddrinfo()` error code. +* @brief Returns a string representing of `getaddrinfo()` error code. * -* @param[in] ecode Error code returned by `getaddrinfo()`. +* @param[in] errcode Error code returned by `getaddrinfo()`. * -* @return A pointer to a string describing the error. +* @return A pointer to a string containing the error code, for example "EAI_NONAME" +* for EAI_NONAME error type. */ -const char *gai_strerror(int ecode); +const char *gai_strerror(int errcode); #ifdef __cplusplus } diff --git a/components/sock_utils/src/gai_strerror.c b/components/sock_utils/src/gai_strerror.c index a4060cf2f..a4ff73767 100644 --- a/components/sock_utils/src/gai_strerror.c +++ b/components/sock_utils/src/gai_strerror.c @@ -1,17 +1,36 @@ /* - * SPDX-FileCopyrightText: 2024 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2024-2025 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ #include #include "gai_strerror.h" +#include "lwip/netdb.h" -_Thread_local char gai_strerror_string[32]; +#define HANDLE_GAI_ERROR(code) \ + case code: return #code; -const char *gai_strerror(int ecode) +const char *gai_strerror(int errcode) { - if (snprintf(gai_strerror_string, sizeof(gai_strerror_string), "EAI error:%d", ecode) < 0) { - return "gai_strerror() failed"; + switch (errcode) { + /* lwip defined DNS codes */ + HANDLE_GAI_ERROR(EAI_BADFLAGS) + HANDLE_GAI_ERROR(EAI_FAIL) + HANDLE_GAI_ERROR(EAI_FAMILY) + HANDLE_GAI_ERROR(EAI_MEMORY) + HANDLE_GAI_ERROR(EAI_NONAME) + HANDLE_GAI_ERROR(EAI_SERVICE) + /* other error codes optionally defined in platform/newlib or toolchain */ +#ifdef EAI_AGAIN + HANDLE_GAI_ERROR(EAI_AGAIN) +#endif +#ifdef EAI_SOCKTYPE + HANDLE_GAI_ERROR(EAI_SOCKTYPE) +#endif +#ifdef EAI_SYSTEM + HANDLE_GAI_ERROR(EAI_SYSTEM) +#endif + default: + return "Unknown error"; } - return gai_strerror_string; }