0

UDP クライアント用の UDP ソケットを作成し、異なるポート番号で UDP パケットを送信して、宛先からの応答を一定時間待ちます。

私の疑問は..ソケットを閉じずに、UDPソケットを同じソケットFDの複数のポート番号(IPアドレスでも)に再バインドすることは可能ですか?? (RAW ソケットは使えません :()

EDIT1:同じIPアドレスとポート番号で2つの異なるソケットファイル記述子をバインドしようとしましたが、結果がまちまちです..(両方のソケットファイル記述子について、SO_REUSEADDRオプションを設定しています)。

Linux カーネル 2.6.8 では

最初のソケット FD - 正常にバインドされます。

2 番目のソケット FD: アドレスが既に使用されていることを示すエラー 98 を返します。

Linux カーネル 2.6.24 の場合

最初のソケット FD: 正常にバインド

2 番目のソケット FD: バインドに成功

4

3 に答える 3

1

私の疑問は..ソケットを閉じずに、UDPソケットを同じソケットFDの複数のポート番号(IPアドレスでも)に再バインドすることは可能ですか??

POSIXでは、現在公式にサポートされていないようです

過去に、いくつかのプラットフォームで re-bind()ing が可能であると聞いたことがありますが、個人的には使用したことがありません。

これ以外に最善の解決策はありますか???

開いている UDP ソケットのキャッシュを保持し、poll() でソケットを使用して IO の多重化とタイムアウト処理を行います。

于 2010-07-15T09:33:16.763 に答える
0

select()開いているソケットのグループで使用してみてください。

于 2010-07-15T04:03:13.803 に答える
0

これを実現するには、1 つのポートに結合された 1 つの UDP ソケットを使用してデータを受信し、別のポート (別のポートに結合) を使用して送信を行います。

于 2010-07-15T09:51:28.150 に答える