不使用 bind() 和 port=0 的 C++ 空闲 TCP 端口列表

List of free TCP ports in C++ without using bind() with port=0

我需要创建一组动态 ffmpeg 实例来侦听 C++ 程序中可用的端口。 ffmpeg 实例是使用标识为 ffmpeg -i tcp://ip:port?listen ... 的命令创建的,其中端口号应该是可用的空闲端口。然后在 C++ 程序中使用 execv() 执行 ffmpeg 命令。

因此,我需要找到一个当前可用的空闲端口,而无需使用 bind()port=0。据我了解,bind() 将在尝试检查端口是否可用时绑定端口。

如果有办法在 C++ 中实现它,请告诉我。

谢谢。

您可以先自己使用端口为 0 的 bind(),这将自动绑定到空闲且未使用的端口。然后,使用 getsockname() 找出您绑定到的端口。然后关闭套接字,并执行你的 ffmpeg 侦听器,将它指向你刚刚关闭的端口。

当然,在您关闭套接字和 ffmpeg 启动之间,任何其他东西都可以进入并占用此端口。但无论您如何确定哪个端口可用,这都是正确的。

再做一点工作,您可以使这个过程更可靠:继续告诉 ffmpeg 绑定到端口 0。假设它有效,在它创建套接字后您可以查看 /proc/<pid>/fd 找到它的套接字,然后查看 /proc/net/tcp 找出它绑定到哪个端口。