2

2 つのネットワーク インターフェイスがあり、両方で同じ UDP ポートにバインドしようとしていますが、2 番目のポートにバインドしようとするとエラーが発生しますEADDRINUSE。ソケットにバインドするときに、sockaddr*使用するポートと一意の IP アドレスを設定した場所を渡します。

ソケットオプションを使用する必要がありますSO_REUSEADDRか? これにより、メッセージをどちらのソケットでも受信できるようになりますか、それともバインド先の IP アドレスに一致するソケットに送信されますか?

4

1 に答える 1

2

IPv4用またはIPv6bind(2)に 1 つのソケットを使用できます(必須ではありませんが、これが通常の方法です)。これにより、その単一のソケットがボックス上のすべてのネットワーク インターフェイスからのパケットを受け入れることができるようになります。INADDR_ANYin6addr_any

次に、SO_REUSEADDRsocket オプションを使用すると、他のソケットをより具体的なアドレス、つまり個々のインターフェイスと同じポートにバインドできます。

パケットは、特定のパケットの宛先 IP アドレスに最も一致するアドレスにバインドされているソケットで受信されます。

于 2012-11-22T03:58:53.833 に答える