<div><font size="2">Hi,Ross</font></div>
<div><font size="2"></font>&nbsp;</div>
<div>&nbsp;</div>
<div><font size="2"></font>&nbsp;</div>
<div><font size="2"></font>&nbsp;</div>
<div><font size="2"><a onclick="return top.js.OpenExtLink(window,event,this)" href="http://support.microsoft.com/default.aspx?scid=kb;en-us;131978" target="_blank">http://support.microsoft.com/default.aspx?scid=kb;en-us;131978
</a></font></div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div><br>&nbsp;</div>
<h1>How To Receive/Send Multicasts Under WinNT/Win95 Using WinSock</h1>
<div><a onclick="return top.js.OpenExtLink(window,event,this)" href="http://support.microsoft.com/default.aspx?scid=kb;en-us;131978#appliesto" target="_blank">View products that this article applies to.</a></div>
<div>
<table>
<tbody>
<tr>
<td>Article ID</td>
<td>:</td>
<td>131978</td></tr>
<tr>
<td>Last Review</td>
<td>:</td>
<td>March 7, 2005</td></tr>
<tr>
<td>Revision</td>
<td>:</td>
<td>3.2</td></tr></tbody></table></div>
<div>This article was previously published under Q131978</div>
<div>
<h5>On This Page</h5>
<table>
<colgroup>
<col>
<col>
<col>
<col>
<col>
<col></colgroup>
<tbody>
<tr>
<td><a onclick="return top.js.OpenExtLink(window,event,this)" href="http://support.microsoft.com/default.aspx?scid=kb;en-us;131978#kb1" target="_blank"><img title="SUMMARY" alt="SUMMARY" src="http://support.microsoft.com/library/images/support/kbgraphics/public/en-us/downarrow.gif">
</a></td>
<td colspan="5"><a onclick="return top.js.OpenExtLink(window,event,this)" href="http://support.microsoft.com/default.aspx?scid=kb;en-us;131978#kb1" target="_blank">SUMMARY</a></td></tr>
<tr>
<td><a onclick="return top.js.OpenExtLink(window,event,this)" href="http://support.microsoft.com/default.aspx?scid=kb;en-us;131978#kb2" target="_blank"><img title="MORE INFORMATION" alt="MORE INFORMATION" src="http://support.microsoft.com/library/images/support/kbgraphics/public/en-us/downarrow.gif">
</a></td>
<td colspan="5"><a onclick="return top.js.OpenExtLink(window,event,this)" href="http://support.microsoft.com/default.aspx?scid=kb;en-us;131978#kb2" target="_blank">MORE INFORMATION</a><span></span> </td></tr>
<tr>
<td>&nbsp;</td>
<td><a onclick="return top.js.OpenExtLink(window,event,this)" href="http://support.microsoft.com/default.aspx?scid=kb;en-us;131978#XSLTH3120121122120121120120" target="_blank"><img title="Sending IP Multicast Datagrams" alt="Sending IP Multicast Datagrams" src="http://support.microsoft.com/library/images/support/kbgraphics/public/en-us/downarrow.gif">
</a></td>
<td colspan="4"><a onclick="return top.js.OpenExtLink(window,event,this)" href="http://support.microsoft.com/default.aspx?scid=kb;en-us;131978#XSLTH3120121122120121120120" target="_blank">Sending IP Multicast Datagrams</a>
</td></tr>
<tr>
<td>&nbsp;</td>
<td><a onclick="return top.js.OpenExtLink(window,event,this)" href="http://support.microsoft.com/default.aspx?scid=kb;en-us;131978#XSLTH3143121122120121120120" target="_blank"><img title="Receiving IP Multicast Datagrams" alt="Receiving IP Multicast Datagrams" src="http://support.microsoft.com/library/images/support/kbgraphics/public/en-us/downarrow.gif">
</a></td>
<td colspan="4"><a onclick="return top.js.OpenExtLink(window,event,this)" href="http://support.microsoft.com/default.aspx?scid=kb;en-us;131978#XSLTH3143121122120121120120" target="_blank">Receiving IP Multicast Datagrams
</a></td></tr>
<tr>
<td><a onclick="return top.js.OpenExtLink(window,event,this)" href="http://support.microsoft.com/default.aspx?scid=kb;en-us;131978#kb3" target="_blank"><img title="REFERENCES" alt="REFERENCES" src="http://support.microsoft.com/library/images/support/kbgraphics/public/en-us/downarrow.gif">
</a></td>
<td colspan="5"><a onclick="return top.js.OpenExtLink(window,event,this)" href="http://support.microsoft.com/default.aspx?scid=kb;en-us;131978#kb3" target="_blank">REFERENCES</a></td></tr>
<tr>
<td><a onclick="return top.js.OpenExtLink(window,event,this)" href="http://support.microsoft.com/default.aspx?scid=kb;en-us;131978#appliesto" target="_blank"><img title="APPLIES TO" alt="APPLIES TO" src="http://support.microsoft.com/library/images/support/kbgraphics/public/en-us/downarrow.gif">
</a></td>
<td colspan="5"><span></span><a onclick="return top.js.OpenExtLink(window,event,this)" href="http://support.microsoft.com/default.aspx?scid=kb;en-us;131978#appliesto" target="_blank">APPLIES TO</a></td></tr></tbody></table>
</div>
<div><a></a>
<h2>SUMMARY</h2>
<div>This article describes how a host can become a member of a multicast group and receive and send multicast packets with Windows NT using the Windows Sockets (WinSock) interface. <br><br>This functionality is also available with Windows 95. 
<div>
<table>
<tbody>
<tr>
<td><a onclick="return top.js.OpenExtLink(window,event,this)" href="http://support.microsoft.com/default.aspx?scid=kb;en-us;131978#top" target="_blank"><img title="Back to the top" alt="Back to the top" src="http://support.microsoft.com/library/images/support/kbgraphics/public/en-us/uparrow.gif">
</a></td>
<td><a onclick="return top.js.OpenExtLink(window,event,this)" href="http://support.microsoft.com/default.aspx?scid=kb;en-us;131978#top" target="_blank">Back to the top</a></td></tr></tbody></table></div></div><a></a>
<h2>MORE INFORMATION</h2>
<div><a></a>
<h3>Sending IP Multicast Datagrams</h3>IP multicasting is currently supported only on AF_INET sockets of type SOCK_DGRAM. <br><br>To send a multicast datagram, specify an IP multicast address with a range of <a onclick="return top.js.OpenExtLink(window,event,this)" href="http://224.0.0.0/" target="_blank">
224.0.0.0</a> to <a onclick="return top.js.OpenExtLink(window,event,this)" href="http://239.255.255.255/" target="_blank">239.255.255.255</a> as the destination address in a sendto() call. <br><br>By default, IP multicast datagrams are sent with a time-to-live (TTL) of 1, which prevents them from being forwarded beyond a single subnetwork. The following code demonstrates how to change this functionality: 
<br><br><code><pre>  int ttl = 7 ; // Arbitrary TTL value.

  setsockopt(sock, IPPROTO_IP, IP_MULTICAST_TTL, (char *)&amp;ttl, sizeof(ttl))
                                </pre></code><font face="§ºÊ^, MS Song">Multicast datagrams with a TTL of 0 are not transmitted on any subnetwork. Multicast datagrams with a TTL of greater than one may be delivered to more than one subnetwork if there are one or more multicast routers attached to the first-hop subnetwork.
<span></span> <br><br>A multicast router does not forward multicast datagrams with destination addresses between <a onclick="return top.js.OpenExtLink(window,event,this)" href="http://224.0.0.0/" target="_blank">224.0.0.0
</a> and <a onclick="return top.js.OpenExtLink(window,event,this)" href="http://224.0.0.255/" target="_blank">224.0.0.255</a>, inclusive, regardless of their TTLs. This particular range of addresses is reserved for the use of routing protocols and other low-level topology discovery or maintenance protocols, such as gateway discovery and group membership reporting. Each multicast transmission is sent from a single network interface, even if the host has more than one multicast-capable interface. A socket option is available to override the default for subsequent transmissions from a given socket. For example 
</font><code><pre>  unsigned long addr = inet_addr(&quot;<a onclick="return top.js.OpenExtLink(window,event,this)" href="http://157.57.8.1/" target="_blank">157.57.8.1</a>&quot;);
  setsockopt(sock, IPPROTO_IP, IP_MULTICAST_IF,

            (char *)&amp;addr, sizeof(addr))
                                </pre></code><font face="§ºÊ^, MS Song">where &quot;addr&quot; is the local IP address of the desired outgoing interface. An address of INADDR_ANY may be used to revert to the default interface. Note that this address might be different from the one the socket is bound to. 
<br><br>If a multicast datagram is sent to a group to which the sending host itself belongs (on the outgoing interface), by default, a copy of the datagram is looped back by the IP layer for local delivery. Under some versions of UNIX, there is an option available to disable this behavior (IP_MULTICAST_LOOP). This option is not supported in Windows NT. If you try to disable this behavior, the call fails with the error WSAENOPROTOOPT (Bad protocol option). 
<br><br>A multicast datagram sent with an initial TTL greater than 1 may be delivered to the sending host on a different interface from that on which it was sent, if the host belongs to the destination group on that other interface. The loopback control option has no effect on such delivery.
<span></span> </font>
<div>
<table>
<tbody>
<tr>
<td><a onclick="return top.js.OpenExtLink(window,event,this)" href="http://support.microsoft.com/default.aspx?scid=kb;en-us;131978#top" target="_blank"><font face="§ºÊ^, MS Song"><img title="Back to the top" alt="Back to the top" src="http://support.microsoft.com/library/images/support/kbgraphics/public/en-us/uparrow.gif">
</font></a></td>
<td><a onclick="return top.js.OpenExtLink(window,event,this)" href="http://support.microsoft.com/default.aspx?scid=kb;en-us;131978#top" target="_blank">Back to the top</a></td></tr></tbody></table></div><a></a>
<h3>Receiving IP Multicast Datagrams</h3>Before a host can receive IP multicast datagrams, it must become a member of one or more IP multicast groups. A process can ask the host to join a multicast group by using the following socket option 
<code><pre>   struct ip_mreq mreq;
                                </pre></code><font face="§ºÊ^, MS Song">where &quot;mreq&quot; is the following structure: </font><code><pre>   struct ip_mreq {


       struct in_addr imr_multiaddr;   /* multicast group to join */
       struct in_addr imr_interface;   /* interface to join on    */


   }
                                </pre></code><font face="§ºÊ^, MS Song">For example: </font><code><pre>        #define RECV_IP_ADDR   &quot;<a onclick="return top.js.OpenExtLink(window,event,this)" href="http://225.6.7.8/" target="_blank">225.6.7.8</a>
&quot;  // arbitrary multicast address

        mreq.imr_multiaddr.s_addr = inet_addr(RECV_IP_ADDR);
        mreq.imr_interface.s_addr = INADDR_ANY;
        err = setsockopt(sock, IPPROTO_IP, IP_ADD_MEMBERSHIP,
                        (char*)&amp;mreq, sizeof(mreq))
                                </pre></code><font face="§ºÊ^, MS Song">Note that it is necessary to bind to an address before calling the setsockopt() function. <br><br>Every membership is associated with a single interface, and it is possible to join the same group on more than one interface. The address of &quot;imr_interface&quot; should be INADDR_ANY to choose the default multicast interface, or one of the host's local addresses to choose a particular (multicast-capable) interface.
<span></span> <br><br>The maximum number of memberships is limited only by memory and what the network card supports. <br><br>The following code sample can be used to drop a membership </font><code><pre>   struct ip_mreq mreq;
   setsockopt(sock, IPPROTO_IP, IP_DROP_MEMBERSHIP,


             (char*)&amp;mreq,sizeof(mreq))
                                </pre></code><font face="§ºÊ^, MS Song">where &quot;mreq&quot; contains the same values as used to add the membership. The memberships associated with a socket are also dropped when the socket is closed or the process holding the socket is killed. However, more than one socket may claim a membership in a particular group, and the host remains a member of that group until the last claim is dropped. 
<br><br>The memberships associated with a socket do not necessarily determine which datagrams are received by that socket. Incoming multicast packets are accepted by the kernel IP layer if any socket has claimed a membership in the destination group of the datagram; however, delivery of a multicast datagram to a particular socket is based on the destination port (or protocol type, for raw sockets), just as with unicast datagrams. To receive multicast datagrams sent to a particular port, it is necessary to bind to that local port, leaving the local address unspecified (that is, INADDR_ANY). 
<br><br>More than one process may bind to the same SOCK_DGRAM UDP port if the bind() call is preceded by the following code: </font><code><pre>   int one = 1;
   setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, (char *)&amp;one, sizeof(one))
                                </pre></code><font face="§ºÊ^, MS Song">In this case, every incoming multicast or broadcast UDP datagram destined for the shared port is delivered to all sockets bound to the port. <br><br>The definitions required for the new, multicast-related socket options are located in the 
WINSOCK.H file. All IP addresses are passed in network byte-order. </font>
<div>
<table>
<tbody>
<tr>
<td><a onclick="return top.js.OpenExtLink(window,event,this)" href="http://support.microsoft.com/default.aspx?scid=kb;en-us;131978#top" target="_blank"><span></span><font face="§ºÊ^, MS Song"><img title="Back to the top" alt="Back to the top" src="http://support.microsoft.com/library/images/support/kbgraphics/public/en-us/uparrow.gif">
</font></a></td>
<td><a onclick="return top.js.OpenExtLink(window,event,this)" href="http://support.microsoft.com/default.aspx?scid=kb;en-us;131978#top" target="_blank">Back to the top</a></td></tr></tbody></table></div></div><a></a>
<h2>REFERENCES</h2>
<div>The file DOC\MISC\MULTICAST.TXT is included with the Win32 SDK. 
<div>
<table>
<tbody>
<tr>
<td><a onclick="return top.js.OpenExtLink(window,event,this)" href="http://support.microsoft.com/default.aspx?scid=kb;en-us;131978#top" target="_blank"><img title="Back to the top" alt="Back to the top" src="http://support.microsoft.com/library/images/support/kbgraphics/public/en-us/uparrow.gif">
</a></td>
<td><a onclick="return top.js.OpenExtLink(window,event,this)" href="http://support.microsoft.com/default.aspx?scid=kb;en-us;131978#top" target="_blank">Back to the top</a></td></tr></tbody></table></div></div></div>
<div>
<hr>
<a></a>
<h5>APPLIES TO</h5>
<table>
<tbody>
<tr>
<td>¡E</td>
<td>Microsoft Windows 2000 Server</td></tr>
<tr>
<td>¡E</td>
<td>Microsoft Windows 2000 Advanced Server</td></tr>
<tr>
<td>¡E</td>
<td>Microsoft Windows 2000 Professional Edition</td></tr>
<tr>
<td>¡E</td>
<td>Microsoft Win32 Software Development Kit (SDK) 3.5</td></tr>
<tr>
<td>¡E</td>
<td>Microsoft Win32 Software Development Kit (SDK) 3.51</td></tr>
<tr>
<td>¡E</td>
<td>Microsoft Windows 95</td></tr></tbody></table></div>
<div>
<table>
<tbody>
<tr>
<td><a onclick="return top.js.OpenExtLink(window,event,this)" href="http://support.microsoft.com/default.aspx?scid=kb;en-us;131978#top" target="_blank"><img title="Back to the top" alt="Back to the top" src="http://support.microsoft.com/library/images/support/kbgraphics/public/en-us/uparrow.gif">
</a></td>
<td><a onclick="return top.js.OpenExtLink(window,event,this)" href="http://support.microsoft.com/default.aspx?scid=kb;en-us;131978#top" target="_blank"><span></span>Back to the top</a></td></tr></tbody></table></div>
<div>
<table>
<tbody>
<tr>
<td>
<h5>Keywords:&nbsp;</h5></td>
<td>kbhowto kbwinsock kbapi kbnetwork kbcode KB131978</td></tr></tbody></table>
<div>
<table>
<tbody>
<tr>
<td><a onclick="return top.js.OpenExtLink(window,event,this)" href="http://support.microsoft.com/default.aspx?scid=kb;en-us;131978#top" target="_blank"><img title="Back to the top" alt="Back to the top" src="http://support.microsoft.com/library/images/support/kbgraphics/public/en-us/uparrow.gif">
</a></td>
<td><a onclick="return top.js.OpenExtLink(window,event,this)" href="http://support.microsoft.com/default.aspx?scid=kb;en-us;131978#top" target="_blank">Back to the top</a></td></tr></tbody></table></div></div><br><br>
<div><span class="gmail_quote">2006/3/9, Ross Finlayson &lt;<a href="mailto:finlayson@live555.com">finlayson@live555.com</a>&gt;:</span>
<blockquote class="gmail_quote" style="PADDING-LEFT: 1ex; MARGIN: 0px 0px 0px 0.8ex; BORDER-LEFT: #ccc 1px solid">At 04:18 AM 3/9/2006, you wrote:<br>&gt;I'm using liveMedia to build a simple Streaming Server,<br>&gt;and I found there's problem with the socketJoinGroupSSM(...) on
<br>&gt;WIN32 system, that&nbsp;&nbsp;the sourceFilterAddr should set by<br>&gt;IP_MULTICAST_IF, not&nbsp;&nbsp;IP_ADD_MEMBERSHIP.<br><br>Do you have a reference for this - i.e., the URL of a web page that<br>states that (and why) Windows supposedly implements SSM joins
<br>differently from Unix systems?<br><br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Ross Finlayson<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Live Networks, Inc. (<a href="http://LIVE555.COM">LIVE555.COM</a>)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;<a href="http://www.live555.com/">http://www.live555.com/</a>&gt;
<br><br>_______________________________________________<br>live-devel mailing list<br><a href="mailto:live-devel@lists.live555.com">live-devel@lists.live555.com</a><br><a href="http://lists.live555.com/mailman/listinfo/live-devel">
http://lists.live555.com/mailman/listinfo/live-devel</a><br></blockquote></div><br><br clear="all"><br>-- <br>Aliex Shen, From the world.