Skip to content

espp/socket需要支持未启用IPv6的情形 #679

Description

@LingHsvan

Is your feature request related to a problem?

sdkconfig 中 CONFIG_LWIP_IPV6 未启用,导致 lwIP 没有定义 struct sockaddr_in6。在 C++ 命名空间 espp 中,socket.hpp 里的 struct sockaddr_in6 *ipv6_ptr() 声明被编译器误解析为 espp::sockaddr_in6 的前向声明而非引用全局的 POSIX 类型,导致后续访问其成员时报 "incomplete type" 错误。

Describe the solution you'd like.

在 socket.hpp 和 socket.cpp 中为所有 IPv6 相关代码添加了 #if LWIP_IPV6 条件编译保护

Describe alternatives you've considered.

使能 CONFIG_LWIP_IPV6

Additional context.

[1064/1094] Building CXX object esp-idf/espp__socket/CMakeFiles/__idf_espp__socket.dir/src/socket.cpp.obj
FAILED: esp-idf/espp__socket/CMakeFiles/__idf_espp__socket.dir/src/socket.cpp.obj 
ccache C:\Espressif\tools\xtensa-esp-elf\esp-14.2.0_20260121\xtensa-esp-elf\bin\xtensa-esp32s3-elf-g++.exe -DESP_PLATFORM -DIDF_VER=\"v5.5.5\" -DSOC_MMU_PAGE_SIZE=CONFIG_MMU_PAGE_SIZE -DSOC_XTAL_FREQ_MHZ=CONFIG_XTAL_FREQ -D_GLIBCXX_HAVE_POSIX_SEMAPHORE -D_GLIBCXX_USE_POSIX_SEMAPHORE -D_GNU_SOURCE -D_POSIX_READER_WRITER_LOCKS -IC:/Espressif/components/esp-iot-solution/examples/usb/host/usb_rndis_4g_module/build/config -IC:/Espressif/components/esp-iot-solution/examples/usb/host/usb_rndis_4g_module/managed_components/espp__socket/include -IC:/Espressif/frameworks/esp-idf/components/newlib/platform_include -IC:/Espressif/frameworks/esp-idf/components/freertos/config/include -IC:/Espressif/frameworks/esp-idf/components/freertos/config/include/freertos -IC:/Espressif/frameworks/esp-idf/components/freertos/config/xtensa/include -IC:/Espressif/frameworks/esp-idf/components/freertos/FreeRTOS-Kernel/include -IC:/Espressif/frameworks/esp-idf/components/freertos/FreeRTOS-Kernel/portable/xtensa/include -IC:/Espressif/frameworks/esp-idf/components/freertos/FreeRTOS-Kernel/portable/xtensa/include/freertos -IC:/Espressif/frameworks/esp-idf/components/freertos/esp_additions/include -IC:/Espressif/frameworks/esp-idf/components/esp_hw_support/include -IC:/Espressif/frameworks/esp-idf/components/esp_hw_support/include/soc -IC:/Espressif/frameworks/esp-idf/components/esp_hw_support/include/soc/esp32s3 -IC:/Espressif/frameworks/esp-idf/components/esp_hw_support/dma/include -IC:/Espressif/frameworks/esp-idf/components/esp_hw_support/ldo/include -IC:/Espressif/frameworks/esp-idf/components/esp_hw_support/debug_probe/include -IC:/Espressif/frameworks/esp-idf/components/esp_hw_support/mspi_timing_tuning/include -IC:/Espressif/frameworks/esp-idf/components/esp_hw_support/mspi_timing_tuning/tuning_scheme_impl/include -IC:/Espressif/frameworks/esp-idf/components/esp_hw_support/power_supply/include -IC:/Espressif/frameworks/esp-idf/components/esp_hw_support/port/esp32s3/. -IC:/Espressif/frameworks/esp-idf/components/esp_hw_support/port/esp32s3/include -IC:/Espressif/frameworks/esp-idf/components/esp_hw_support/mspi_timing_tuning/port/esp32s3/. -IC:/Espressif/frameworks/esp-idf/components/esp_hw_support/mspi_timing_tuning/port/esp32s3/include -IC:/Espressif/frameworks/esp-idf/components/heap/include -IC:/Espressif/frameworks/esp-idf/components/heap/tlsf -IC:/Espressif/frameworks/esp-idf/components/log/include -IC:/Espressif/frameworks/esp-idf/components/soc/include -IC:/Espressif/frameworks/esp-idf/components/soc/esp32s3 -IC:/Espressif/frameworks/esp-idf/components/soc/esp32s3/include -IC:/Espressif/frameworks/esp-idf/components/soc/esp32s3/register -IC:/Espressif/frameworks/esp-idf/components/hal/platform_port/include -IC:/Espressif/frameworks/esp-idf/components/hal/esp32s3/include -IC:/Espressif/frameworks/esp-idf/components/hal/include -IC:/Espressif/frameworks/esp-idf/components/esp_rom/include -IC:/Espressif/frameworks/esp-idf/components/esp_rom/esp32s3/include -IC:/Espressif/frameworks/esp-idf/components/esp_rom/esp32s3/include/esp32s3 -IC:/Espressif/frameworks/esp-idf/components/esp_rom/esp32s3 -IC:/Espressif/frameworks/esp-idf/components/esp_common/include -IC:/Espressif/frameworks/esp-idf/components/esp_system/include -IC:/Espressif/frameworks/esp-idf/components/esp_system/port/soc -IC:/Espressif/frameworks/esp-idf/components/esp_system/port/include/private -IC:/Espressif/frameworks/esp-idf/components/xtensa/esp32s3/include -IC:/Espressif/frameworks/esp-idf/components/xtensa/include -IC:/Espressif/frameworks/esp-idf/components/xtensa/deprecated_include -IC:/Espressif/frameworks/esp-idf/components/lwip/include -IC:/Espressif/frameworks/esp-idf/components/lwip/include/apps -IC:/Espressif/frameworks/esp-idf/components/lwip/include/apps/sntp -IC:/Espressif/frameworks/esp-idf/components/lwip/lwip/src/include -IC:/Espressif/frameworks/esp-idf/components/lwip/port/include -IC:/Espressif/frameworks/esp-idf/components/lwip/port/freertos/include -IC:/Espressif/frameworks/esp-idf/components/lwip/port/esp32xx/include -IC:/Espressif/frameworks/esp-idf/components/lwip/port/esp32xx/include/arch -IC:/Espressif/frameworks/esp-idf/components/lwip/port/esp32xx/include/sys -IC:/Espressif/components/esp-iot-solution/examples/usb/host/usb_rndis_4g_module/managed_components/espp__base_component/include -IC:/Espressif/components/esp-iot-solution/examples/usb/host/usb_rndis_4g_module/managed_components/espp__logger/include -IC:/Espressif/components/esp-iot-solution/examples/usb/host/usb_rndis_4g_module/managed_components/espp__format/detail/fmt/include -IC:/Espressif/components/esp-iot-solution/examples/usb/host/usb_rndis_4g_module/managed_components/espp__format/include -IC:/Espressif/frameworks/esp-idf/components/esp_timer/include -IC:/Espressif/components/esp-iot-solution/examples/usb/host/usb_rndis_4g_module/managed_components/espp__task/include -IC:/Espressif/frameworks/esp-idf/components/pthread/include @"C:/Espressif/components/esp-iot-solution/examples/usb/host/usb_rndis_4g_module/build/toolchain/cxxflags" -fdiagnostics-color=always -fdiagnostics-color=always -ffunction-sections -fdata-sections -Wall -Werror=all -Wno-error=unused-function -Wno-error=unused-variable -Wno-error=unused-but-set-variable -Wno-error=deprecated-declarations -Wextra -Wno-error=extra -Wno-unused-parameter -Wno-sign-compare -Wno-enum-conversion -gdwarf-4 -ggdb -Og -fno-shrink-wrap -fmacro-prefix-map=C:/Espressif/components/esp-iot-solution/examples/usb/host/usb_rndis_4g_module=. -fmacro-prefix-map=C:/Espressif/frameworks/esp-idf=/IDF -fstrict-volatile-bitfields -fno-jump-tables -fno-tree-switch-conversion -std=gnu++2b -fno-exceptions -fuse-cxa-atexit -MD -MT esp-idf/espp__socket/CMakeFiles/__idf_espp__socket.dir/src/socket.cpp.obj -MF esp-idf\espp__socket\CMakeFiles\__idf_espp__socket.dir\src\socket.cpp.obj.d -o esp-idf/espp__socket/CMakeFiles/__idf_espp__socket.dir/src/socket.cpp.obj -c C:/Espressif/components/esp-iot-solution/examples/usb/host/usb_rndis_4g_module/managed_components/espp__socket/src/socket.cpp
In file included from C:/Espressif/frameworks/esp-idf/components/lwip/port/include/arpa/inet.h:10,
                 from C:/Espressif/components/esp-iot-solution/examples/usb/host/usb_rndis_4g_module/managed_components/espp__socket/include/socket.hpp:9,
                 from C:/Espressif/components/esp-iot-solution/examples/usb/host/usb_rndis_4g_module/managed_components/espp__socket/src/socket.cpp:1:
C:/Espressif/components/esp-iot-solution/examples/usb/host/usb_rndis_4g_module/managed_components/espp__socket/src/socket.cpp: In member function 'void espp::Socket::Info::update()':
C:/Espressif/components/esp-iot-solution/examples/usb/host/usb_rndis_4g_module/managed_components/espp__socket/src/socket.cpp:30:29: error: invalid use of incomplete type 'const struct espp::sockaddr_in6'
   30 |     address = inet_ntoa(ipv6->sin6_addr);
      |                             ^~
C:/Espressif/frameworks/esp-idf/components/lwip/lwip/src/include/lwip/inet.h:158:75: note: in definition of macro 'inet_ntoa'
  158 | #define inet_ntoa(addr)                 ip4addr_ntoa((const ip4_addr_t*)&(addr))
      |                                                                           ^~~~
C:/Espressif/components/esp-iot-solution/examples/usb/host/usb_rndis_4g_module/managed_components/espp__socket/include/socket.hpp:73:12: note: forward declaration of 'struct espp::sockaddr_in6'
   73 |     struct sockaddr_in6 *ipv6_ptr();
      |            ^~~~~~~~~~~~
In file included from C:/Espressif/frameworks/esp-idf/components/lwip/lwip/src/include/lwip/arch.h:48,
                 from C:/Espressif/frameworks/esp-idf/components/lwip/lwip/src/include/lwip/debug.h:40,
                 from C:/Espressif/frameworks/esp-idf/components/lwip/lwip/src/include/lwip/opt.h:52,
                 from C:/Espressif/frameworks/esp-idf/components/lwip/lwip/src/include/lwip/inet.h:43:
C:/Espressif/components/esp-iot-solution/examples/usb/host/usb_rndis_4g_module/managed_components/espp__socket/src/socket.cpp:36:22: error: invalid use of incomplete type 'const struct espp::sockaddr_in6'
   36 |     port = ntohs(ipv6->sin6_port);
      |                      ^~
C:/Espressif/frameworks/esp-idf/components/lwip/port/esp32xx/include/arch/cc.h:32:36: note: in definition of macro 'ntohs'
   32 | #define ntohs(x) __builtin_bswap16(x)
      |                                    ^
C:/Espressif/components/esp-iot-solution/examples/usb/host/usb_rndis_4g_module/managed_components/espp__socket/include/socket.hpp:73:12: note: forward declaration of 'struct espp::sockaddr_in6'
   73 |     struct sockaddr_in6 *ipv6_ptr();
      |            ^~~~~~~~~~~~
C:/Espressif/components/esp-iot-solution/examples/usb/host/usb_rndis_4g_module/managed_components/espp__socket/src/socket.cpp: In member function 'void espp::Socket::Info::from_sockaddr(const espp::sockaddr_in6&)':
C:/Espressif/components/esp-iot-solution/examples/usb/host/usb_rndis_4g_module/managed_components/espp__socket/src/socket.cpp:53:23: error: invalid use of incomplete type 'const struct espp::sockaddr_in6'
   53 |   address = inet_ntoa(source_address.sin6_addr);
      |                       ^~~~~~~~~~~~~~
C:/Espressif/frameworks/esp-idf/components/lwip/lwip/src/include/lwip/inet.h:158:75: note: in definition of macro 'inet_ntoa'
  158 | #define inet_ntoa(addr)                 ip4addr_ntoa((const ip4_addr_t*)&(addr))
      |                                                                           ^~~~
C:/Espressif/components/esp-iot-solution/examples/usb/host/usb_rndis_4g_module/managed_components/espp__socket/include/socket.hpp:73:12: note: forward declaration of 'struct espp::sockaddr_in6'
   73 |     struct sockaddr_in6 *ipv6_ptr();
      |            ^~~~~~~~~~~~
C:/Espressif/components/esp-iot-solution/examples/usb/host/usb_rndis_4g_module/managed_components/espp__socket/src/socket.cpp:59:16: error: invalid use of incomplete type 'const struct espp::sockaddr_in6'
   59 |   port = ntohs(source_address.sin6_port);
      |                ^~~~~~~~~~~~~~
C:/Espressif/frameworks/esp-idf/components/lwip/port/esp32xx/include/arch/cc.h:32:36: note: in definition of macro 'ntohs'
   32 | #define ntohs(x) __builtin_bswap16(x)
      |                                    ^
C:/Espressif/components/esp-iot-solution/examples/usb/host/usb_rndis_4g_module/managed_components/espp__socket/include/socket.hpp:73:12: note: forward declaration of 'struct espp::sockaddr_in6'
   73 |     struct sockaddr_in6 *ipv6_ptr();
      |            ^~~~~~~~~~~~
C:/Espressif/components/esp-iot-solution/examples/usb/host/usb_rndis_4g_module/managed_components/espp__socket/src/socket.cpp:60:33: error: invalid application of 'sizeof' to incomplete type 'const espp::sockaddr_in6'
   60 |   memcpy(&raw, &source_address, sizeof(source_address));
      |                                 ^~~~~~~~~~~~~~~~~~~~~~
[1084/1094] Building CXX object esp-idf/espp__rtsp/CMakeFiles/__idf_espp__rtsp.dir/src/rtsp_client.cpp.obj
ninja: build stopped: subcommand failed.

 *  终端进程“C:\Espressif\tools\ninja\1.12.1\ninja.EXE”已终止,退出代码: 1。

Metadata

Metadata

Labels

bugSomething isn't workingenhancementNew feature or requestsocket

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions