Как получить сообщение после включения обратной связи? - PullRequest
0 голосов
/ 21 апреля 2011

У меня запущена и работает моя программа многоадресного (udp) отправителя / получателя.Если я использую setsockopt для включения обратной связи с отправителем следующим образом:

if(setsockopt(sockfd, IPPROTO_IP, IP_MULTICAST_LOOP, &loop, sizeof(loop)) < 0)
    error("loopback failed.");

и позже я отправляю сообщение каждому подписчику, как мой отправитель получает отправленное сообщение?Отправитель не хранит свой собственный IP-адрес и номер порта и отправил себе сообщение (в основном, подписываясь на себя), не так ли?

Так что это должно быть что-то вроде:

receive1 (подписка)-> отправитель

получатель2 (подписка) -> отправитель

, когда пришло время отправить:

отправитель (информация) -> получатель1

отправитель (информация) -> получатель2

отправитель (информация) -> отправитель?// как работает этот шаг?

Спасибо за помощь:)

Ответы [ 2 ]

0 голосов
/ 21 апреля 2011

В дополнение к включению обратной связи (которая фактически может быть включена по умолчанию, согласно http://tldp.org/HOWTO/Multicast-HOWTO-6.html#ss6.1), вам также необходимо подписаться на группу многоадресной рассылки.

Не нужно отправлять отдельнуюкопия пакета каждому получателю. Если многоадресные подписки верны, и вы находитесь в сети, которая поддерживает многоадресную рассылку, то достаточно одной передачи.

0 голосов
/ 21 апреля 2011

В вашем коде loop должно иметь тип u_char, а не int. Конечно, это также изменит конечный параметр setsockopt() на значение 1. У меня нет личного опыта, но В. Ричард Стивенс говорит об этом в UNIX Network Programming (3rd edition), Vol. 1, раздел 21.6, так и должно быть.

Он также говорит, что использование типа int является распространенной ошибкой программирования.

...