2016-12-22 7 views
0

ipv4とipv6の両方で同じポートをリッスンするgsoapサーバーを実装しようとしていますが、-DWITH_IPV6 -DWITH_NO_IPV6_V6ONLYマクロ定義を使用してgsoapをコンパイルしましたが、 "netstat -l" "netstat -l"コマンドには、tcp listenning serverがあります。 -DWITH_IPV6 -DWITH_IPV6_V6ONLYマクロを使用してコードをコンパイルすると、Ipv6のみで動作し、 "netstat -l"応答にはtcp6 listenning serverがあります。 gsoapがipv4とipv6の両方で機能しない

私は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ソースコードにパッチを当てる/しないでこれを成功させる方法はありますか?

答えて

0

私が研究している限り、gsoapを使用して2つのアドレスファミリAF_INETとAF_INET6をバインドしてリッスンする方法はありません。私の主題を達成するために、私は2つの石鹸オブジェクトを作って、別のソケット(1つはipv4、もう1つはipv6)に変更したsoap_bind関数を使ってバインドします。

0

まったく同じ問題が発生しました。

それがサポートされています。

WITH_NO_IPV6_V6ONLYを定義してください。 (WITH_IPV6はstdsoap2.hと定義されています)

これにより、デュアルスタックソケットを可能にするソケットのオプションが設定されます。私が見る限りでは、デフォルトである可能性のあるシステムによって異なります。それはWindowsではなく、デュアルスタックのサポートにはVista以上が必要です。

関連する問題