不使用 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
找出它绑定到哪个端口。
我需要创建一组动态 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
找出它绑定到哪个端口。