title: UPnP Multicast: missing answers from M-SEARCH (Discovery)
body: <p>I created a small program to test UPnP Multicast (Visual C# 2010 Express, running on Windows 7 Professional 64 Bit). I can receive the UPnP NOTIFY Messages from UPnP Devices in my Network. But when i send the M-SEARCH Message, i get no Answers.</p>
  
  <p>I have tested the same code on a iOS environment (Monotouch for iOS, running on a iPhone simulator on a Mac). There it runs fine and i get all the search responses from my UPnP devices. I can also see the M-SEARCH message from my windows program.</p>
  
  <p>It looks like Windows (or a Firewall?) is hiding the search responses. Any idea?</p>
  
  <p>Here is the code:</p>
  
  <pre><code>IPEndPoint LocalEndPoint = new IPEndPoint(IPAddress.Any, 1900);
  IPEndPoint MulticastEndPoint = new IPEndPoint(IPAddress.Parse("239.255.255.250"), 1900);
  
  Socket UdpSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
  
  UdpSocket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
  UdpSocket.Bind(LocalEndPoint);
  UdpSocket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership, new MulticastOption(MulticastEndPoint.Address, IPAddress.Any));
  UdpSocket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.MulticastTimeToLive, 2);
  UdpSocket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.MulticastLoopback, true);
  
  Console.WriteLine("UDP-Socket setup done...\r\n");
  
  string SearchString = "M-SEARCH * HTTP/1.1\r\nHOST:239.255.255.250:1900\r\nMAN:\"ssdp:discover\"\r\nST:ssdp:all\r\nMX:3\r\n\r\n";
  
  UdpSocket.SendTo(Encoding.UTF8.GetBytes(SearchString), SocketFlags.None, MulticastEndPoint);
  
  Console.WriteLine("M-Search sent...\r\n");
  
  byte[] ReceiveBuffer = new byte[64000];
  
  int ReceivedBytes = 0;
  
  while (true)
  {
      if (UdpSocket.Available &gt; 0)
      {
          ReceivedBytes = UdpSocket.Receive(ReceiveBuffer, SocketFlags.None);
  
          if (ReceivedBytes &gt; 0)
          {
              Console.WriteLine(Encoding.UTF8.GetString(ReceiveBuffer, 0, ReceivedBytes));
          }
      }
  }
  </code></pre>