我需要创建一组动态 ffmpeg 实例来监听 C++ 程序中可用的端口。 ffmpeg 实例是使用标识为 ffmpeg -i tcp://ip:port?listen ...
的命令创建的,其中端口号应该是可用的空闲端口。然后在 C++ 程序中使用 execv()
执行 ffmpeg 命令。
因此,我需要找到一个当前可用的空闲端口,而无需使用 port=0
的 bind()
。据我了解,bind()
将在尝试检查端口是否可用时绑定(bind)端口。
如果有一种方法可以在 C++ 中实现它,请告诉我。
谢谢。
最佳答案
您可以使用 bind()
首先自己使用 0 端口,这将自动绑定(bind)到一个空闲且未使用的端口。然后,使用 getsockname()
找出你被绑定(bind)到哪个端口。然后关闭套接字,并执行你的 ffmpeg
监听器,将其指向您刚刚关闭的端口。
当然,在您关闭套接字和ffmpeg
之间启动时,其他任何东西都可以进来抢这个端口。但无论您如何确定哪个端口可用,这都是正确的。
再做一点工作,您可以使这个过程更可靠:继续告诉 ffmpeg
绑定(bind)到端口 0。假设它有效,在它创建套接字后你可以查看 /proc/<pid>/fd
找到它的 socket ,然后查看 /proc/net/tcp
找出它绑定(bind)到哪个端口。
关于c++ - 不使用 bind() 和 port=0 的 C++ 空闲 TCP 端口列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37090183/