gsoap不能同时服务于ipv4和ipv6

时间:2016-12-22 11:06:40

标签: c++ sockets ipv6 ipv4 gsoap

我正在尝试实现一个通过ipv4和ipv6侦听同一端口的gsoap服务器,但它没有在“netstat -l”命令中列为tcp6,尽管我使用-DWITH_IPV6 -DWITH_NO_IPV6_V6ONLY宏定义编译了gsoap。 “netstat -l”命令有tcp listenning server。当我使用-DWITH_IPV6 -DWITH_IPV6_V6ONLY宏编译代码时,它仅适用于Ipv6,而“netstat -l”响应具有tcp6侦听服务器。

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

有没有办法用/补丁gsoap源代码来成功?

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

刚刚遇到了同样的问题。

原来它支持。

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

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