【问题标题】:gsoap does not serve over both ipv4 and ipv6gsoap 不能同时服务于 ipv4 和 ipv6
【发布时间】:2016-12-22 11:06:39
【问题描述】:

我正在尝试实现一个 gsoap 服务器,它在 ipv4 和 ipv6 上侦听相同的端口,但它没有在“netstat -l”命令中列为 tcp6,尽管我使用 -DWITH_IPV6 -DWITH_NO_IPV6_V6ONLY 宏定义编译了 gsoap。“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

有没有办法通过/不修补 gsoap 源代码来成功?

【问题讨论】:

    标签: c++ sockets ipv6 ipv4 gsoap


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      刚刚遇到了同样的问题。

      原来是支持的。

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

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

      【讨论】:

        猜你喜欢
        • 2021-07-30
        • 2010-11-20
        • 2020-08-27
        • 2015-09-16
        • 2010-12-09
        • 1970-01-01
        • 2012-05-09
        • 2016-01-17
        • 2021-11-08
        相关资源
        最近更新 更多