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

标签 c++ tcp ffmpeg port

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

因此,我需要找到一个当前可用的空闲端口,而无需使用 port=0bind()。据我了解,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/

相关文章:

c++ - 如何在子类中初始化静态常量成员变量?

c++ - Live555截断FFMpeg的编码数据

PHP - 在 Windows 上使用 shell_exec 运行 ffmpeg.exe 的问题

c - openSSL:解密不会产生正确的纯文本

Flutter - 如何在 FFMPEG 命令中获取使用数据(输入和输出)

c++ - 监视目录以完成子目录的创建,然后启动另一个进程,C++

c++ - 插入函数不断重新创建根节点

c++ - 具有数据成员的抽象基类

networking - 在一台服务器上监听 2 个端口

javascript - Node.js TCP 服务器传入缓冲区