質問: recvfrom()UDPパケット(Microsoft)を受信したインターフェイスのIPを取得する MicrosoftマルチホームPCのINADDR_ANYにバインドされたソケットでrecvfrom()を使用する。 recvfrom()がUDPパケットを取得したとき、パケットを受け取ったインタフェース(IP)を見つけるにはどうすればいいですか?
回答: 単一のリスニングソケットが複数のIPにバインドされている場合、受信IPを知る方法はありません。単一のソケットを `INADDR_ANY` にバインドする代わりに、 `GetAdaptersInfo()`および/または `GetAdapterAddresses()`を使用してマシンのローカルIPリストを照会することができます。各IP用に個別のリスニングソケットを作成します。指定されたソケットがどのIPにバインドされているかを知るには、 `getsockname()`を使用できます。ただし、そのソケットが複数のIPではなく特定のIPにバインドされている場合に限ります。