2017-08-28 30 views
0

私は複数のNICを持つシステムを持っていますので、複数のIPアドレスがあり、私のローカルアドレスとリモートアドレスが必要な初期化を使用するSDKを使用しました。C++ WinSockは接続用ローカルインターフェイスを選択します

ローカルエンドポイントを自動選択します。現時点では、すべてのローカルアドレスを(GetAdaptersAddresses経由で)列挙しています。これは、正しい一致(サブネットマスクを使用する必要があります)をチェックしています。

しかし、この仕事はルーティングテーブルによって行われているので、リモートアドレスを指定したWindows APIは私に正しいローカルエンドポイントを返しますか?

+0

なぜ特定のローカルアドレスを指定する必要がありますか?リモートアドレスに接続する際、SDKが自動的に適切なローカルインターフェイスを選択しないのですか?アドレスを指定する必要がある場合は、 '0.0.0.0'(IPv4)または' :: '(IPv6)のワイルドカードアドレスを使用しようとしましたか?これにより、SDKが接続を試みるときにOSが最適なルートを決定できるようにする必要があります –

答えて

2

リモートアドレスを指定すると、正しいローカルエンドポイントを返すWindows APIがありますか?

GetBestInterface()GetBestInterfaceEx()をご覧ください。

両方の関数は、インターフェイスにインデックスを返します。一致するインターフェイスインデックスを持つアダプタが見つかるまで、GetAdaptersInfo()/GetAdaptersAddresses()のネットワークアダプタを列挙してインターフェイスのIPを取得できます。

関連する問題