2009-10-06 28 views
5

UDPマルチキャストソケットを設定するために必要な実装は、Windows XPとWindows Vistaの間で変更されているようです。具体的に:Windows XPでXPとVistaの間のwinsock APIの違いを利用したUDPマルチキャスト

  • 、あなた必見コールbind()あなたはどのマルチキャスト固有のソケットオプションを参照することができます前に。

  • ただし、Windows Vistaでは、あなたはマルチキャストソケットを扱っていないコールbind()なければならないとき。

これらの2つのポイントのいずれかが失敗すると、実行時にソケットエラーが発生します。

私は狂っているのですか、これを他の人にも見せてもらえますか? bind()呼び出しの条件付きコンパイルよりも良い解決策がありますか?

答えて

5

のために一から書き直されたことを知っていますマルチキャストグループ?

サーバーフレームワークでいくつかのテストを実行しましたが、私はWindows 7でbind()と呼んでいます(私はVistaボックスを持っていません)。そして期待どおりにマルチキャストグループに参加できますバインディング・アドレスとマルチキャスト・アドレスの両方が有効である限り。

INADDR_ANYでbind()を呼び出すことはできません。マルチキャストグループの参加がエラー10022(WSAEINVAL)で失敗し、マルチキャストグループアドレスが有効なマルチキャストアドレスでない場合は、エラー10049 (WSAEADDRNOTAVAIL)。どちらも十分だと思われる。 XPで

私はXPボックスを起動しています...今

[XP上でテストした後編集]

それはINADDR_ANYからbind()に法的だし、無効なマルチキャストアドレスを使用することが法的です。だから、私はあなたがそれらのうちの1つをやっていることを期待しています。それはXP上で動作し、Vista/Win7では動作しません。

あなたはどのようなエラーを表示していますか、どのアドレスにバインドしていますか?

1

私は、この特定の問題について知らないが、私はネットワークスタックは、あなたがIP_ADD_MEMBERSHIPを適用し、参加するために作ることsetsockopt()呼び出しからどのようなエラーを取得しているVistaの

+0

素晴らしい - あなたは彼らが新しいコードの回帰テストをやっていると思いますか?これは私を怒らせる... arrrrgggghhhHHH! – Thomi

0

よくある質問ですが、マシン上にどのバージョンのwinsockが存在しているかを知る方法を知っていますか?

xpまたはserver 2003を使用しているいくつかの古いマシンがあります。 Windows版のテストでは役に立ちません。 以前のバインドを受け入れていないWindowsバージョン5.1があるようですそれを受け入れる5.2バージョンのマシン。

関連する問題