2009-07-11 Michael Barker <mike@middlesoft.co.uk>
[mono.git] / mcs / class / System / System.Net.Sockets / MulticastOption.cs
index 35a8a360d558341cb6f62889f09bb473594b9f14..68f2d76b95c9db6336508032ebe99c7615222a0d 100644 (file)
@@ -46,28 +46,33 @@ namespace System.Net.Sockets
                int iface_index;
 #endif
 
-               public MulticastOption (IPAddress grp)
-                       : this (grp, IPAddress.Any)
+               public MulticastOption (IPAddress group)
+                       : this (group, IPAddress.Any)
                {
-                       group = grp;
                }
+
 #if NET_2_0
-               [MonoTODO ("Get interface IP from interface index")]
                public MulticastOption (IPAddress group, int interfaceIndex)
                {
+                       if (group == null)
+                               throw new ArgumentNullException ("group");
+                       if (interfaceIndex < 0 || interfaceIndex > 0xffffff)
+                               throw new ArgumentOutOfRangeException ("interfaceIndex");
+
                        this.group = group;
+                       this.iface_index = interfaceIndex;
                }
 #endif
-               public MulticastOption (IPAddress grp, IPAddress addr)
-               {
-                       if (grp == null)
-                               throw new ArgumentNullException ("grp");
 
-                       if (addr == null)
-                               throw new ArgumentNullException ("addr");
+               public MulticastOption (IPAddress group, IPAddress mcint)
+               {
+                       if (group == null)
+                               throw new ArgumentNullException ("group");
+                       if (mcint == null)
+                               throw new ArgumentNullException ("mcint");
 
-                       group = grp;
-                       local = addr;
+                       this.group = group;
+                       this.local = mcint;
                }
 
                public IPAddress Group {
@@ -77,13 +82,23 @@ namespace System.Net.Sockets
 
                public IPAddress LocalAddress {
                        get { return local; }
-                       set { local = value; }
+                       set {
+                               local = value;
+#if NET_2_0
+                               iface_index = 0;
+#endif
+                       }
                }
 
 #if NET_2_0
                public int InterfaceIndex {
                        get { return iface_index; }
-                       set { iface_index = value; }
+                       set {
+                               if (value < 0 || value > 0xffffff)
+                                       throw new ArgumentOutOfRangeException ("value");
+                               iface_index = value;
+                               local = null;
+                       }
                }
 #endif
        }