8

現在、理想的にはboost::asioを使用して、接続を確立するための空きポートの番号を見つける方法を見つけようとしています。このポート番号は、リッスンするために使用されます (そして、ソケットを開くことができます)。

ざっくりですが、やり方はありますか

   tcp::resolver::query query("localhost", port); 

ポートは空白のままです (0 に設定しても機能しません)。

以前に見られたオプションはどれも、移植可能または効率的ではありませんでした。

4

1 に答える 1

12

これを処理する最善の方法は、ソケットがポートにバインドされているときに、OS が利用可能なポートをランダムに選択するようにすることです。ソケットにポート 0 にバインドするように指示し、成功した場合は、ソケットがバインドされた実際のポートをソケットに問い合わせます。事前にポートを見つけてバインドしようとしないでください。競合状態が発生します。ポートを見つけた後でも、バインドする前に、別のソケットがポートに引っかかる可能性があります。

于 2012-12-06T01:43:03.443 に答える