Specifying what network interface an UDP multicast should go to in .NET

后端 未结 4 1092
孤独总比滥情好
孤独总比滥情好 2020-12-28 20:26

On a computer with both an active Wireless Card and a LAN-Port with a crossover cable hooked up to another machine running the same application, we need to send a UDP multic

4条回答
  •  半阙折子戏
    2020-12-28 20:39

    Just as addendum to Nikolai answer: the problem with KB318911 is a dirty trick that user must provide necessary adapter index. While looking how to retrieve this adapter index I figured out such recipe:

    NetworkInterface[] nics = NetworkInterface.GetAllNetworkInterfaces();
    foreach (NetworkInterface adapter in nics)
    {
      IPInterfaceProperties ip_properties = adapter.GetIPProperties();
      if (!adapter.GetIPProperties().MulticastAddresses.Any())
        continue; // most of VPN adapters will be skipped
      if (!adapter.SupportsMulticast)
        continue; // multicast is meaningless for this type of connection
      if (OperationalStatus.Up != adapter.OperationalStatus)
        continue; // this adapter is off or not connected
      IPv4InterfaceProperties p = adapter.GetIPProperties().GetIPv4Properties();
      if (null == p)
        continue; // IPv4 is not configured on this adapter
    
      // now we have adapter index as p.Index, let put it to socket option
      my_sock.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.MulticastInterface, (int)IPAddress.HostToNetworkOrder(p.Index));
    }
    

    Full note at http://windowsasusual.blogspot.ru/2013/01/socket-option-multicast-interface.html

提交回复
热议问题