启用环回后如何收到消息?

时间:2011-04-20 22:59:51

标签: c sockets udp multicast loopback

我的多播(udp)发送器/接收器程序启动并运行。如果我使用setsockopt与发送者启用环回,如下所示:

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

稍后我将消息发送给每个订阅者,我的发送者如何获得发送的消息?发件人不存储自己的IP地址和端口号,并向自己发送一条消息(基本上订阅自己)吗?

所以它应该是这样的:

receiver1(订阅) - &gt;发送方

receiver2(订阅) - &gt;发送方

什么时候发送:

发件人(info) - &gt; receiver1

发件人(info) - &gt; receiver2

发件人(info) - &gt;发送者? //这个步骤是如何工作的?

感谢您的帮助:)

2 个答案:

答案 0 :(得分:0)

在您的代码中,loop必须是u_char类型,而不是int。当然,这也会改变最终的setsockopt()参数,使其具有值1.我没有这方面的个人经验,但是W. Richard Stevens在UNIX网络编程(第3版),Vol。 1,第21.6节,所以必须如此。

他还说在这里使用类型int是一个常见的编程错误。

答案 1 :(得分:0)

除了启用环回(实际上可以默认启用,根据http://tldp.org/HOWTO/Multicast-HOWTO-6.html#ss6.1),您还需要订阅多播组。

没有必要向每个接收器发送数据包的单独副本。如果多播订阅是正确的并且您在支持多播的网络上,那么单个传输就足够了。