LINUX.ORG.RU

multiple UPnP services running on a single server


0

1

Предположим, я делаю аналог роутера ASUS из своего локалхоста. Я хочу поднять на нём UPnP-сервер, который позволит пробрасывать порты на внутренние хосты (у асуса есть такой функционал и, например, uTorrent активно этим пользуется) и одновременно DLNA-сервер, который будет светить на мой телевизор фильмами с харда.

Насколько мне известно, для обоих протоколов используется один и тот же сетевой порт. Ещё насколько мне известно, две разных программы не могут одновременно обслуживать запросы на один и тот же порт. Следовательно, поскольку на асусе этот вопрос как-то решён, значит этот вопрос как-то решается. И что-то я не могу понять, как. Пока что всё, что я придумал — это что сервер, который запустился первым, может служить фронтэндом для сервера, который запустился вторым, но мне кажется сомнительным этот вариант.

Покажите мне какой-нибудь текст, где объясняется, как решается этот вопрос, пожалуйста. Можно на русском, английском или на каком-нибудь человеко-читаемом языке программирования.

★★
Ответ на: комментарий от greek_31

Если без DLNA, то УМВР с miniupnpd.

Я на 99% уверен, что оно и с dlna заработает, потому что на асусе работает линуксовый minidlna. Вопрос в том, почему оно работает, почему они друг другу не мешают.

name_no ★★
() автор топика
Ответ на: комментарий от name_no

DLNA - Транслирует контент куда-либо Upnp - Открывает порты файервола по запросу.

greek_31 ★★
()

Насколько мне известно, для обоих протоколов используется один и тот же сетевой порт.

Там случайный для DLNA выбирается. И как-то используется ssdp чтобы сообщать где кто.

i-rinat ★★★★★
()
Ответ на: комментарий от i-rinat

dlna — это просто набор upnp-устройств. И там, и там используется ssdp, который как раз и висит на порту 1900/UDP

name_no ★★
() автор топика

Я ламер, но теперь я знаю про SO_REUSEADDR

More than one process may bind to the same SOCK_DGRAM UDP port if the bind() is preceded by:

int one = 1;
setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &one, sizeof(one))

In this case, every incoming multicast or broadcast UDP datagram destined to the shared port is delivered to all sockets bound to the port.

name_no ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.