Открытие сокета Boost.Asio UDP с эфемерным портом

Я работаю над приложением, которое будет получать пакеты RTP от другой локальной службы по UDP. В начале протокола я получаю сообщение с IP-адресом, с которого я буду получать эти пакеты RTP, но номер порта будет указан как 0 (ноль) ... Я должен открыть свой сокет UDP, используя эфемерный порт. Мой ответ на данное сообщение будет содержать фактический порт, который я открыл, чтобы отправитель мог знать, куда направлять пакеты.

Моя сетевая библиотека представляет собой реализацию сокетов с boost::asio. Где найти четкую информацию, как открыть такой сокет без указания ненулевого порта, т.е. использовать эфемерный порт? Поиск в документации по ускорению для «эфемерного» не дает мне результатов в сети.

Конечно, я готов увидеть реальный пример, но было бы неплохо найти хорошую документацию.

Спасибо.


person alpartis    schedule 11.09.2012    source источник
comment
эфемерный означает, что другому концу протокола все равно, какой порт вы используете, в этом случае просто выберите один. Я что-то упускаю?   -  person Chad    schedule 11.09.2012
comment
Я бы предпочел, чтобы базовая ОС выбрала порт, поскольку мое приложение не может знать, что может использовать любое другое запущенное в данный момент приложение в эфемерном диапазоне.   -  person alpartis    schedule 11.09.2012


Ответы (1)


Я бы поставил под сомнение использование таких эфемерных портов, но ... - вы можете привязать свой UDP-сокет к порту 0, а затем использовать local_endpoint() для получения фактического порта, назначенного ОС.

person Nikolai Fetissov    schedule 11.09.2012