2013-08-26 3 views
0

В обсуждении SO_REUSEPORT на reddit был отправлен следующий вопрос, но ответа не было. Мне интересно, знает ли Stack Overflow ответ.Использование SO_REUSEPORT с многоадресной рассылкой UDP

Может ли кто-нибудь сказать мне, как это взаимодействует с многоадресной рассылкой?

У меня есть приложение, в котором программа должна слушать многоадресные сообщения UDP, и эта программа может быть запущена несколько раз на том же компьютере. Когда приходит сообщение, все процессы прослушивания должны получить его.

Я заметил, что в Linux это нормально, если я не устанавливаю SO_REUSEPORT, и если я правильно понимаю, установка SO_REUSEPORT может быть неправильной задачей - я не хочу, чтобы сообщения UDP, распространяемые между процессов, я хочу, чтобы все процессы получили копию. Однако в OS X второе выполнение программы не может найти свободный порт, если не установлен SO_REUSEPORT.

tl; dr: Ожидается ли установка SO_REUSEPORT при использовании многоадресной рассылки?

+0

возможно дубликат [опции сокета SO \ _REUSEADDR и SO \ _REUSEPORT, как они отличаются? Они имеют в виду то же самое во всех основных операционных системах?] (Http://stackoverflow.com/questions/14388706/socket-options-so-reuseaddr-and-so-reuseport-how-do-they-differ-do-they -имел ввиду) – EJP

ответ

1

WIth SO_REUSEPORT, можно связать несколько сокетов с одним и тем же портом и адресом. Единственное требование - установить более ранние сокеты. Таким образом, если мы хотим, чтобы два сокета, sock1 и sock2 были привязаны к одному и тому же порту (и адресу), тогда s2 сможет повторно использовать порт/адрес, только если оба sock1 и sock2 устанавливают SO_REUSEPORT. С уважением к многоадресной передаче, если оба sock1 и sock2 являются приемниками одной и той же группы многоадресной рассылки, тогда они оба получат копию данных.

Вы могли бы найти этот ответ полезным: Socket options SO_REUSEADDR and SO_REUSEPORT, how do they differ? Do they mean the same across all major operating systems?