私はSO_BINDTODEVICEを使用しているいくつかのうちから発信インターフェイスへソケットをバインドするアプリケーションを持っています。UDPソケットでインターフェイスを見つける
問題は、私が応答を受け取ったときに、どのインタフェースから来たのかを知る必要があるということです。同じipが複数のインターフェイスにバインドされているため、応答が来たIPアドレスだけでは不十分です。
私は以下のコードをstackoverflowの質問で提供しています。しかし、forループの2回目の繰り返しでセグメンテーション違反が発生することはありません(最初の反復はループの一部を継続します)。
いくつかお手伝いできますか?
C++ DGRAM socket get the RECEIVER address
How to tell which interface the socket received the message from?
OSとは何ですか? TCPまたはUDPソケットでこれを試していますか? – EdwardH
Linux(POSIX API)。それはudpソケットです。今問題は解決されていますが。ソケット作成の直後にIP_PKTINFOオプションを設定する必要があるようです。受信呼び出しの直前でそれを行うと、インターフェイスインデックス0が常に返されます。この間、ソケットはデータの送信にも使用され、受信用の選択ディスクリプタセットに追加されました。 – fayyazkl
[ソケットがどのインタフェースからメッセージを受け取ったかをどのように伝えるか?](http://stackoverflow.com/questions/603577/how-to-tell-which-interface-the-socket-received-the-message -から) –