2016-05-07 7 views
1

C++プログラム内で利用可能なポートをリッスンする動的ffmpegインスタンスのセットを作成する必要があります。 ffmpegインスタンスは、ffmpeg -i tcp://ip:port?listen ...というコマンドを使用して作成されます。ポート番号は空いている空きポートにする必要があります。その後、ffmpegコマンドは、C++プログラム内でexecv()を使用して実行されます。port = 0でbind()を使わずにC++で空いているTCPポートのリスト

したがって、bind()port=0を使用せずに現在利用できる空きポートを見つける必要があります。私が理解しているように、bind()は、ポートが使用可能かどうかをチェックするときにポートをバインドします。

C++でこれを実装する方法があるかどうか教えてください。

ありがとうございました。

答えて

2

あなたはポート0で最初にbind()を使用することができます。これは自動的にフリーで未使用のポートにバインドされます。次に、getsockname()を使用して、バインドされたポートを確認します。その後、ソケットを閉じて、あなたのffmpegリスナーを実行し、直前に閉じたポートを指します。

もちろん、ソケットを閉じてからffmpegが起動するまでに、何か他のものが入ってこのポートをつかむことができます。しかし、それはどのポートが利用可能であるかをどのように把握しても真実になります。

ffmpegにポート0をバインドするように指示してください。ソケットが作成された後、/proc/<pid>/fdのソケットを見つけることができますが、 /proc/net/tcpを参照して、どのポートにバインドされているか把握してください。

+0

ソケットがlisten()またはconnect()されていない場合は、 'bind()'のために 'CLOSE_WAIT'状態にならないはずです。 –

関連する問題