Вы получаете случайный, затем попробуйте следующий.
Если вызов bind()
на втором порту завершается неудачно с EADDRINUSE
, промойте и повторите ...
Что бы это ни стоило, в большинстве систем, если два вызова достаточно близки, вам, вероятно, не придется повторять последовательность.
Эфемерные порты обычно назначаются последовательно, поэтому единственный путь, которым следующий порт не будетfree будет, если порт уже используется долгоживущим процессом (маловероятно, по UDP), или если кто-то перебил вызов bind()
между вашими двумя.
Аналогично, если вам нуженRTP-порт должен быть четным, просто выберите случайным образом первый, и если он вернет нечетный порт, попробуйте еще раз - в соответствии с вышеизложенным, вероятность того, что следующий порт будет четным!Если нет, промойте и повторите ...