src/applications/udp-echo/udp-echo-server.cc
changeset 4472 e20a31541404
parent 4410 59e19500509d
child 4502 07d34c0d8d18
child 5028 01f02baebba9
--- a/src/applications/udp-echo/udp-echo-server.cc	Thu May 28 20:16:56 2009 +0200
+++ b/src/applications/udp-echo/udp-echo-server.cc	Thu May 28 21:37:25 2009 -0700
@@ -18,9 +18,11 @@
 
 #include "ns3/log.h"
 #include "ns3/ipv4-address.h"
+#include "ns3/address-utils.h"
 #include "ns3/nstime.h"
 #include "ns3/inet-socket-address.h"
 #include "ns3/socket.h"
+#include "ns3/udp-socket.h"
 #include "ns3/simulator.h"
 #include "ns3/socket-factory.h"
 #include "ns3/packet.h"
@@ -76,6 +78,19 @@
       m_socket = Socket::CreateSocket (GetNode(), tid);
       InetSocketAddress local = InetSocketAddress (Ipv4Address::GetAny (), m_port);
       m_socket->Bind (local);
+      if (addressUtils::IsMulticast (m_local))
+        {
+          Ptr<UdpSocket> udpSocket = DynamicCast<UdpSocket> (m_socket);
+          if (udpSocket)
+            {
+              // equivalent to setsockopt (MCAST_JOIN_GROUP)
+              udpSocket->MulticastJoinGroup (0, m_local);
+            }
+          else
+            {
+              NS_FATAL_ERROR ("Error: joining multicast on a non-UDP socket");
+            }
+        }
     }
 
   m_socket->SetRecvCallback(MakeCallback(&UdpEchoServer::HandleRead, this));