我正在尝试实现一个通过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_UNSPEC
到getaddrinfo
,并且它没有使用返回的addrinfo数据的ai_next
。 addrinfo.ai_family设置为AF_INET,addrinfo.ai_next-> ai_family设置为AF_INET6,它不使用addrinfo.ai_next
。
有没有办法用/补丁gsoap源代码来成功?
答案 0 :(得分:0)
据我研究,没有办法使用gsoap绑定和监听两个地址族AF_INET和AF_INET6。为了实现我的主题,我使用我修改过的soap_bind函数创建了两个soap对象并绑定到不同的套接字(一个是ipv4,另一个是ipv6)。
答案 1 :(得分:0)
刚刚遇到了同样的问题。
原来它支持。
只需定义WITH_NO_IPV6_V6ONLY
即可。 (这导致WITH_IPV6
被定义为stdsoap2.h)
这导致在允许双堆栈套接字的套接字上设置选项。据我所知,取决于可能是默认的系统。它不在Windows下,您需要Vista或更高版本才能支持双栈。