WSAIoctl
Win32 WinSock関数の機能によって返されるネットワーク インターフェイスの順序を指定する方法はありSIO_GET_INTERFACE_LIST
ますか?
バックグラウンド:
Windows で ACE/TAO CORBA 実装を実行するネームサービスに、IIOP.NET CORBA 実装を使用して実装されたクライアントが使用する必要がある ACE/TAO ベースのサービスが登録されている異種 CORBA システムがあります。IIOP.NET ベースのクライアントは、別の Windows マシン上にあります。ACE/TAO マシンには複数のネットワーク インターフェイス (クライアント マシンがアクセスできるのはそのうちの 1 つだけ) があるため、複数の IP アドレスがあります。
IIOP.NET クライアントはネームサービスに接続し、使用する必要がある登録済みサーバー CORBA オブジェクトへのプロキシを取得できますが、プロキシを使用しようとすると例外がスローされます。
デバッグにあまりにも多くの時間を費やしたことに基づいて、IIOP.NET がサービスを要求されたときにネーム サービスが返す CORBA IOR 文字列の最初の IP アドレスにしか接続を試みないことが問題であるという結論に達しました。IOR 文字列は、IP アドレスを含むオブジェクトの説明です。ほとんどの CORBA クライアントは、IOR 文字列内のすべてのアドレスを使用してサーバー オブジェクトに接続しようとしますが、IIOP.NET はそうしないようです。
IOR 文字列を生成する ACE/TAO コードは、WinSockWSAIoctl
コマンドと制御コードSIO_GET_INTERFACE_LIST
を使用して、ボックス上のネットワーク インターフェイスのリストを返し、それらすべてを IOR 文字列に追加します。問題は、最初の IP アドレスが、IIOP クライアントが使用するネットワーク上にないものであるため、IIOP.NET クライアントがその IP アドレスを使用してサーバー オブジェクトに接続しようとすると、明らかに失敗し、正しい IP アドレス。ACE/TAO などの他の CORBA クライアントはすべての IP アドレスを試し、この構成で動作します。
私はネットワーキング/CORBA の神ではないので、ACE/TAO や IIOP.NET を変更しようとするのは現実的ではありません。このシステムで 2 つの別々のネットワークを使用するのには十分な理由がありますが、最初のデフォルト IPによって返されるアドレスはWSAIOCtl
、クライアントが必要とするものであり、その IP アドレスが IOR 文字列の最初の IP アドレスになり、IIOP.NET がその IP アドレスを正常に使用するため、問題が解決します。WSAIoctl
では、ネットワーク インターフェイスを異なる順序で返す信頼できる方法はありますか? 残念ながら、これについて MSDN で文書化されているものは何もありません。
ありがとう、
デイブ