以下では、1枚のネットワークカードを想定しています。
サブネット内の他のユーザーにその存在を知らせるように設計されたプログラムのコンポーネントがあります。このために、プログラムが起動するたびに(そしてその後定期的に)ブロードキャストを送信するソリューションを実装しましINADDR_BROADCAST
た。必要なポートでリッスンする人は誰でも、後で使用するためにどこから来たかを覚えています。
これの問題は、私が自分の放送を覚えたくないということです。理論的には、これは簡単に実行できると思いました。ローカルIPを見つけて、取得したものと比較するだけですrecvfrom
。
ただし、ローカルIPを取得するのは難しいことがわかりました。NULLの場合はをgetaddrinfo
返し127.0.0.1
、getaddrinfo
ホスト名の場合はパブリックIPを返します。誰かが実際のサブネットIPを見つける方向に私を向けることができますか?私はここで非常に明白な何かを見逃しているに違いないと思いますが、まあ...私はまだそれを見逃しています:)
注:ブロードキャストに関する他のSOの質問、特にこれを読んだことがあります:すべてのインターフェイスでのUDP-ブロードキャストですが、マルチインターフェイスの問題についてはまだ理解していません。