Files
esp-protocols/components/sock_utils
David Cermak f12a205657 fix(sockutls): Fix gai_strerror() impl to return const string
Previous gai_strerror() returned numeric representation of the code,
but used TLS storage, which might cause issues with stack sizes on all
tasks in the system. Alternatively we can leave the storage to static
only (which wouldn't be thread-safe) or we could one-time allocate and
never free (which is wrong).
This option uses hardcoded strings for common error codes used in lwip.
The disadvantage is that we might need to update the impl in the future
when lwip adds more codes.
2025-01-07 14:06:00 +01:00
..
2024-12-20 15:41:10 +01:00
2024-12-20 15:41:10 +01:00

Socket Utilities

This component provides simplified implementations of common socket-related utilities using lwIP and esp_netif. It is especially useful for porting Linux-based libraries to ESP32 where performance and memory constraints are secondary considerations.

Supported Functions

API Description Limitations Declared in
ifaddrs() Retrieves interface addresses using esp_netif IPv4 addresses only ifaddrs.h
socketpair() *) Creates a pair of connected sockets using lwIP loopback stream sockets IPv4 sockets only socketpair.h, sys/socket.h **)
pipe() *) Wraps socketpair() to provide unidirectional pipe-like functionality Uses bidirectional sockets in place of true pipes socketpair.h, unistd.h ***)
getnameinfo() Converts IP addresses to human-readable form using lwIP's inet_ntop() IPv4 only; supports NI_NUMERICHOST and NI_NUMERICSERV flags only getnameinfo.h, netdb.h in ESP-IDF
gai_strerror() Returns error code as a string Simple numeric string representation only gai_strerror.h, netdb.h **)
gethostname() Returns lwip netif hostname Not a system-wide hostname, but interface specific hostname gethostname.h, unistd.h in ESP-IDF

Notes:

  • *) socketpair() and pipe() are built on top of lwIP TCP sockets, inheriting the same characteristics. For instance, the maximum transmit buffer size is based on the TCP_SND_BUF setting.
  • **) socketpair() and gai_strerror() are declared in sock_utils header files, the declaration is propagated to ESP-IDF from v5.5 to the official header files. If you're using older IDF version, you need to manually pre-include related header files from the sock_utils public include directory.
  • ***) pipe() is declared in compiler's sys/unistd.h.