gsoap 不能同时服务于 ipv4 和 ipv6

gsoap does not serve over both ipv4 and ipv6

我正在尝试实现一个在 ipv4 和 ipv6 上侦听相同端口的 gsoap 服务器,但它没有在“netstat -l”命令中作为 tcp6 列出,尽管我使用 -DWITH_IPV6 -DWITH_NO_IPV6_V6ONLY 宏编译了 gsoap definitions."netstat -l" 命令有 tcp 侦听服务器。当我使用 -DWITH_IPV6 -DWITH_IPV6_V6ONLY 宏编译代码时,它仅适用于 Ipv6,并且“netstat -l”响应具有 tcp6 侦听服务器。

当我调试 the code 时,我看到 soap_bind 函数通过 getaddrinfo 传递 ai_family = PF_UNSPEC,它不使用返回的 addrinfo 数据的 ai_next。 addrinfo.ai_family 设置为 AF_INET,addrinfo.ai_next->ai_family 设置为 AF_INET6 且不使用 addrinfo.ai_next.

有什么方法可以成功with/out修补gsoap源代码吗?

据我研究,无法使用 gsoap 绑定和侦听两个地址族 AF_INET 和 AF_INET6。为了实现我的主题,我制作了两个 soap 对象并使用我修改的 soap_bind 函数绑定不同的套接字(一个是 ipv4,另一个是 ipv6)。

刚遇到这个完全相同的问题。

原来是支持的。

只需定义WITH_NO_IPV6_V6ONLY。 (这导致 WITH_IPV6 被定义为 stdsoap2.h)

这导致在允许双栈套接字的套接字上设置一个选项。据我所知,取决于可能是默认的系统。它不在 Windows 下,您需要 Vista 或更高版本才能支持双栈。