5

Windows XP と Windows Vista では、UDP マルチキャスト ソケットをセットアップするために必要な実装が変更されているようです。具体的には:

  • Windows XP では、マルチキャスト固有のソケット オプションを参照する前に呼び出す必要があります。bind()

  • ただし、Windows Vista では、マルチキャスト ソケットを処理するときに呼び出してはなりません。bind()

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

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

4

3 に答える 3

5

マルチキャスト グループsetsockopt()に適用して参加するために行った呼び出しから、どのようなエラーが発生していますか?IP_ADD_MEMBERSHIP

ここでサーバー フレームワークを使用していくつかのテストを実行したところ、Windows 7 で呼び出しbind()を行い (Vista ボックスを手元に持っていません)、マルチキャスト グループに参加することもできます。バインディング アドレスとマルチキャスト アドレスは有効です。

ただし、bind() を で呼び出すことはできませんINADDR_ANY。マルチキャスト グループへの参加がエラー 10022 ( WSAEINVAL) で失敗し、マルチキャスト グループ アドレスが有効なマルチキャスト アドレスでない場合、呼び出しはエラー 10049 ( WSAEADDRNOTAVAIL) で失敗するためです。これはすべて十分に公平に思えます。

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

[XPでのテスト後に編集]

XP では、無効なマルチキャスト アドレスを使用することは合法ですbind()INADDR_ANYしたがって、あなたはそれらのいずれかを実行していると思います。そのため、Vista/Win7 ではなく XP で動作します。

では、どのようなエラーが発生し、どのアドレスにバインドされているのでしょうか?

于 2009-10-06T15:18:53.053 に答える
1

この特定の質問についてはわかりませんが、Vista用にネットワークスタックが最初から書き直されたことは知っています。

于 2009-10-06T14:58:31.933 に答える
0

非常に古い質問ですが、マシンに存在する winsock のバージョンを確認する方法を知っている人はいますか?

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

于 2015-07-02T10:16:32.673 に答える