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

dic*_*oce 2 networking udp

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

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

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

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

Aln*_*tak 5

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

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

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

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

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