你如何找到一个免费的UDP端口对?

时间:2012-02-02 23:11:43

标签: networking udp

RTP规范指出,给定RTP流的RTCP数据包将在主RTP端口+1的端口上发送。例如,如果您有视频到达RTP端口9010,然后在端口9011上,您可以预期RTCP数据包。

当我正在协商单播流时(通过RTSP协议),我必须建议我想要视频发送给我的端口对(1个用于RTP,1个用于RTCP)...

现在,我知道如果我绑定一个端口为0的套接字,系统将从短暂范围中选择一个空闲端口...我遇到的问题是我实际上需要一对端口,我需要RTCP端口为RTP端口的+1(事实上,我认为我需要RTP端口为偶数)。

有没有办法找到一对空闲端口?这通常是怎么做的?

1 个答案:

答案 0 :(得分:5)

你得到一个随机的,然后尝试下一个。

如果第二个端口上的bind()呼叫因EADDRINUSE而失败,请冲洗并重复...

对于它的价值,在大多数系统中,如果两个呼叫足够接近,你可能不必重复序列。

临时端口通常按顺序分配,因此下一个端口不会被释放的唯一方法是,如果端口已经被长期进程使用(不太可能在UDP上),或者其他人偷偷进入端口bind()在你们两人之间打电话。

同样地,如果你需要RTP端口是偶数,只需要随机选择第一个,如果返回一个奇数端口再试一次 - 按照上面的说法,下一个端口可能是偶数!如果没有,请冲洗并重复......