1 // System.Net.Sockets.UdpClientTest.cs
4 // Chris Bacon <chris.bacon@docobo.co.uk>
5 // Gert Driesen <drieseng@users.sourceforge.net>
10 using System.Net.Sockets;
11 using System.Threading;
12 using System.Threading.Tasks;
14 using NUnit.Framework;
16 using MonoTests.Helpers;
18 namespace MonoTests.System.Net.Sockets {
20 public class UdpClientTest {
22 #if FEATURE_NO_BSD_SOCKETS
23 [ExpectedException (typeof (PlatformNotSupportedException))]
25 public void Constructor1 ()
30 client = new MyUdpClient ();
32 Assert.IsNotNull (s, "Client");
33 Assert.AreEqual (AddressFamily.InterNetwork, s.AddressFamily, "Client:AddressFamily");
34 Assert.IsFalse (s.Connected, "Client:Connected");
35 Assert.IsFalse (s.IsBound, "#A:Client:IsBound");
36 Assert.IsNull (s.LocalEndPoint, "Client:LocalEndPoint");
37 Assert.AreEqual (ProtocolType.Udp, s.ProtocolType, "Client:ProtocolType");
38 Assert.IsNull (s.RemoteEndPoint, "Client:RemoteEndPoint");
39 Assert.AreEqual (SocketType.Dgram, s.SocketType, "Client:SocketType");
40 Assert.IsFalse (client.Active, "Active");
41 Assert.IsFalse (client.DontFragment, "DontFragment");
42 Assert.IsFalse (client.EnableBroadcast, "EnableBroadcast");
43 //Assert.IsFalse (client.ExclusiveAddressUse, "ExclusiveAddressUse");
44 Assert.IsTrue (client.MulticastLoopback, "MulticastLoopback");
45 //Assert.AreEqual (32, client.Ttl, "Ttl");
49 [Test] // .ctor (AddressFamily)
50 #if FEATURE_NO_BSD_SOCKETS
51 [ExpectedException (typeof (PlatformNotSupportedException))]
53 public void Constructor2 ()
58 client = new MyUdpClient (AddressFamily.InterNetwork);
60 Assert.IsNotNull (s, "#A:Client");
61 Assert.AreEqual (AddressFamily.InterNetwork, s.AddressFamily, "#A:Client:AddressFamily");
62 Assert.IsFalse (s.Connected, "#A:Client:Connected");
63 Assert.IsFalse (s.IsBound, "#A:Client:IsBound");
64 Assert.IsNull (s.LocalEndPoint, "#A:Client:LocalEndPoint");
65 Assert.AreEqual (ProtocolType.Udp, s.ProtocolType, "#A:Client:ProtocolType");
66 Assert.IsNull (s.RemoteEndPoint, "#A:Client:RemoteEndPoint");
67 Assert.AreEqual (SocketType.Dgram, s.SocketType, "#A:Client:SocketType");
68 Assert.IsFalse (client.Active, "#A:Active");
69 //Assert.IsFalse (client.DontFragment, "#A:DontFragment");
70 Assert.IsFalse (client.EnableBroadcast, "#A:EnableBroadcast");
71 //Assert.IsFalse (client.ExclusiveAddressUse, "#A:ExclusiveAddressUse");
72 Assert.IsTrue (client.MulticastLoopback, "#A:MulticastLoopback");
73 //Assert.AreEqual (32, client.Ttl, "#A:Ttl");
75 if (!Socket.OSSupportsIPv6)
76 Assert.Ignore ("IPv6 not enabled.");
78 client = new MyUdpClient (AddressFamily.InterNetworkV6);
80 Assert.IsNotNull (s, "#B:Client");
81 Assert.AreEqual (AddressFamily.InterNetworkV6, s.AddressFamily, "#B:Client:AddressFamily");
82 Assert.IsFalse (s.Connected, "#B:Client:Connected");
83 Assert.IsFalse (s.IsBound, "#A:Client:IsBound");
84 Assert.IsNull (s.LocalEndPoint, "#B:Client:LocalEndPoint");
85 Assert.AreEqual (ProtocolType.Udp, s.ProtocolType, "#B:Client:ProtocolType");
86 Assert.IsNull (s.RemoteEndPoint, "#B:Client:RemoteEndPoint");
87 Assert.AreEqual (SocketType.Dgram, s.SocketType, "#B:Client:SocketType");
88 Assert.IsFalse (client.Active, "#B:Active");
89 //Assert.IsFalse (client.DontFragment, "#B:DontFragment");
90 Assert.IsFalse (client.EnableBroadcast, "#B:EnableBroadcast");
91 //Assert.IsFalse (client.ExclusiveAddressUse, "#B:ExclusiveAddressUse");
92 Assert.IsTrue (client.MulticastLoopback, "#B:MulticastLoopback");
93 //Assert.AreEqual (32, client.Ttl, "#B:Ttl");
97 [Test] // .ctor (AddressFamily)
98 #if FEATURE_NO_BSD_SOCKETS
99 [ExpectedException (typeof (PlatformNotSupportedException))]
101 public void Constructor2_Family_Invalid ()
104 new UdpClient (AddressFamily.NetBios);
106 } catch (ArgumentException ex) {
107 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#A2");
108 Assert.IsNull (ex.InnerException, "#A3");
109 // 'UDP' Client can only accept InterNetwork or InterNetworkV6
111 Assert.IsNotNull (ex.Message, "#A4");
112 Assert.AreEqual ("family", ex.ParamName, "#A5");
116 new UdpClient ((AddressFamily) 666);
118 } catch (ArgumentException ex) {
119 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#B2");
120 Assert.IsNull (ex.InnerException, "#B3");
121 Assert.IsNotNull (ex.Message, "#B4");
122 Assert.AreEqual ("family", ex.ParamName, "#B5");
126 [Test] // .ctor (Int32)
127 #if FEATURE_NO_BSD_SOCKETS
128 [ExpectedException (typeof (PlatformNotSupportedException))]
130 public void Constructor3 ()
135 using (MyUdpClient client = new MyUdpClient (IPEndPoint.MinPort))
138 Assert.IsNotNull (s, "#A:Client");
139 Assert.AreEqual (AddressFamily.InterNetwork, s.AddressFamily, "#A:Client:AddressFamily");
140 Assert.IsFalse (s.Connected, "#A:Client:Connected");
141 Assert.IsTrue (s.IsBound, "#A:Client:IsBound");
142 Assert.AreEqual (ProtocolType.Udp, s.ProtocolType, "#A:Client:ProtocolType");
143 Assert.AreEqual (SocketType.Dgram, s.SocketType, "#A:Client:SocketType");
144 Assert.IsFalse (client.Active, "#A:Active");
145 Assert.IsFalse (client.DontFragment, "#A:DontFragment");
146 Assert.IsFalse (client.EnableBroadcast, "#A:EnableBroadcast");
147 //Assert.IsFalse (client.ExclusiveAddressUse, "#A:ExclusiveAddressUse");
148 Assert.IsTrue (client.MulticastLoopback, "#A:MulticastLoopback");
149 //Assert.AreEqual (32, client.Ttl, "#A:Ttl");
150 localEP = s.LocalEndPoint as IPEndPoint;
151 Assert.IsNotNull (localEP, "#A:Client:LocalEndpoint");
152 Assert.AreEqual (IPAddress.Any, localEP.Address, "#A:Client:LocalEndPoint/Address");
153 Assert.AreEqual (AddressFamily.InterNetwork, localEP.AddressFamily, "#A:Client:LocalEndPoint/AddressFamily");
155 using (MyUdpClient client = new MyUdpClient (IPEndPoint.MaxPort))
158 Assert.IsNotNull (s, "#B:Client");
159 Assert.AreEqual (AddressFamily.InterNetwork, s.AddressFamily, "#B:Client:AddressFamily");
160 Assert.IsFalse (s.Connected, "#B:Client:Connected");
161 Assert.IsTrue (s.IsBound, "#B:Client:IsBound");
162 Assert.AreEqual (ProtocolType.Udp, s.ProtocolType, "#B:Client:ProtocolType");
163 Assert.AreEqual (SocketType.Dgram, s.SocketType, "#B:Client:SocketType");
164 Assert.IsFalse (client.Active, "#B:Active");
165 Assert.IsFalse (client.DontFragment, "#B:DontFragment");
166 Assert.IsFalse (client.EnableBroadcast, "#B:EnableBroadcast");
167 //Assert.IsFalse (client.ExclusiveAddressUse, "#B:ExclusiveAddressUse");
168 Assert.IsTrue (client.MulticastLoopback, "#B:MulticastLoopback");
169 //Assert.AreEqual (32, client.Ttl, "#B:Ttl");
170 localEP = s.LocalEndPoint as IPEndPoint;
171 Assert.IsNotNull (localEP, "#B:Client:LocalEndpoint");
172 Assert.AreEqual (IPAddress.Any, localEP.Address, "#B:Client:LocalEndPoint/Address");
173 Assert.AreEqual (AddressFamily.InterNetwork, localEP.AddressFamily, "#B:Client:LocalEndPoint/AddressFamily");
174 Assert.AreEqual (IPEndPoint.MaxPort, localEP.Port, "#B:Client:LocalEndPoint/Port");
178 [Test] // .ctor (Int32)
179 #if FEATURE_NO_BSD_SOCKETS
180 [ExpectedException (typeof (PlatformNotSupportedException))]
182 public void Constructor3_Port_OutOfRange ()
185 new UdpClient (IPEndPoint.MaxPort + 1);
187 } catch (ArgumentOutOfRangeException ex) {
188 // Specified argument was out of the range of valid values
189 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#A2");
190 Assert.IsNull (ex.InnerException, "#A3");
191 Assert.IsNotNull (ex.Message, "#A4");
192 Assert.AreEqual ("port", ex.ParamName, "#A5");
196 new UdpClient (IPEndPoint.MinPort - 1);
198 } catch (ArgumentOutOfRangeException ex) {
199 // Specified argument was out of the range of valid values
200 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#A2");
201 Assert.IsNull (ex.InnerException, "#A3");
202 Assert.IsNotNull (ex.Message, "#A4");
203 Assert.AreEqual ("port", ex.ParamName, "#A5");
207 [Test] // .ctor (IPEndPoint)
208 #if FEATURE_NO_BSD_SOCKETS
209 [ExpectedException (typeof (PlatformNotSupportedException))]
211 public void Constructor4 ()
217 clientEP = new IPEndPoint (IPAddress.Loopback, NetworkHelpers.FindFreePort ());
218 using (MyUdpClient client = new MyUdpClient (clientEP))
221 Assert.IsNotNull (s, "#A:Client");
222 Assert.AreEqual (AddressFamily.InterNetwork, s.AddressFamily, "#A:Client:AddressFamily");
223 Assert.IsFalse (s.Connected, "#A:Client:Connected");
224 Assert.IsTrue (s.IsBound, "#A:Client:IsBound");
225 Assert.AreEqual (ProtocolType.Udp, s.ProtocolType, "#A:Client:ProtocolType");
226 Assert.AreEqual (SocketType.Dgram, s.SocketType, "#A:Client:SocketType");
227 Assert.IsFalse (client.Active, "#A:Active");
228 Assert.IsFalse (client.DontFragment, "#A:DontFragment");
229 Assert.IsFalse (client.EnableBroadcast, "#A:EnableBroadcast");
230 //Assert.IsFalse (client.ExclusiveAddressUse, "#A:ExclusiveAddressUse");
231 Assert.IsTrue (client.MulticastLoopback, "#A:MulticastLoopback");
232 //Assert.AreEqual (32, client.Ttl, "#A:Ttl");
233 localEP = s.LocalEndPoint as IPEndPoint;
234 Assert.IsNotNull (localEP, "#A:Client:LocalEndpoint");
235 Assert.IsFalse (object.ReferenceEquals (clientEP, localEP), "#A:Client:LocalEndPoint/ReferenceEquality");
236 Assert.AreEqual (clientEP.Address, localEP.Address, "#A:Client:LocalEndPoint/Address");
237 Assert.AreEqual (clientEP.AddressFamily, localEP.AddressFamily, "#A:Client:LocalEndPoint/AddressFamily");
238 Assert.AreEqual (clientEP.Port, localEP.Port, "#A:Client:LocalEndPoint/Port");
242 [Test] // .ctor (IPEndPoint)
243 #if FEATURE_NO_BSD_SOCKETS
244 [ExpectedException (typeof (PlatformNotSupportedException))]
246 public void Constructor4_LocalEP_Null ()
249 new UdpClient ((IPEndPoint) null);
251 } catch (ArgumentNullException ex) {
252 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
253 Assert.IsNull (ex.InnerException, "#3");
254 Assert.IsNotNull (ex.Message, "#4");
255 Assert.AreEqual ("localEP", ex.ParamName, "#5");
259 [Test] // .ctor (Int32, AddressFamily)
260 #if FEATURE_NO_BSD_SOCKETS
261 [ExpectedException (typeof (PlatformNotSupportedException))]
263 public void Constructor5 ()
268 using (MyUdpClient client = new MyUdpClient (IPEndPoint.MinPort, AddressFamily.InterNetwork))
271 Assert.IsNotNull (s, "#A:Client");
272 Assert.AreEqual (AddressFamily.InterNetwork, s.AddressFamily, "#A:Client:AddressFamily");
273 Assert.IsFalse (s.Connected, "#A:Client:Connected");
274 Assert.IsTrue (s.IsBound, "#A:Client:IsBound");
275 Assert.AreEqual (ProtocolType.Udp, s.ProtocolType, "#A:Client:ProtocolType");
276 Assert.AreEqual (SocketType.Dgram, s.SocketType, "#A:Client:SocketType");
277 Assert.IsFalse (client.Active, "#A:Active");
278 //Assert.IsFalse (client.DontFragment, "#A:DontFragment");
279 Assert.IsFalse (client.EnableBroadcast, "#A:EnableBroadcast");
280 //Assert.IsFalse (client.ExclusiveAddressUse, "#A:ExclusiveAddressUse");
281 Assert.IsTrue (client.MulticastLoopback, "#A:MulticastLoopback");
282 //Assert.AreEqual (32, client.Ttl, "#A:Ttl");
283 localEP = s.LocalEndPoint as IPEndPoint;
284 Assert.IsNotNull (localEP, "#A:Client:LocalEndpoint");
285 Assert.AreEqual (IPAddress.Any, localEP.Address, "#A:Client:LocalEndPoint/Address");
286 Assert.AreEqual (AddressFamily.InterNetwork, localEP.AddressFamily, "#A:Client:LocalEndPoint/AddressFamily");
289 if (!Socket.OSSupportsIPv6)
290 Assert.Ignore ("IPv6 not enabled.");
292 using (MyUdpClient client = new MyUdpClient (IPEndPoint.MaxPort, AddressFamily.InterNetworkV6))
295 Assert.IsNotNull (s, "#B:Client");
296 Assert.AreEqual (AddressFamily.InterNetworkV6, s.AddressFamily, "#B:Client:AddressFamily");
297 Assert.IsFalse (s.Connected, "#B:Client:Connected");
298 Assert.IsTrue (s.IsBound, "#B:Client:IsBound");
299 Assert.AreEqual (ProtocolType.Udp, s.ProtocolType, "#B:Client:ProtocolType");
300 Assert.AreEqual (SocketType.Dgram, s.SocketType, "#B:Client:SocketType");
301 Assert.IsFalse (client.Active, "#B:Active");
302 //Assert.IsFalse (client.DontFragment, "#B:DontFragment");
303 Assert.IsFalse (client.EnableBroadcast, "#B:EnableBroadcast");
304 //Assert.IsFalse (client.ExclusiveAddressUse, "#B:ExclusiveAddressUse");
305 Assert.IsTrue (client.MulticastLoopback, "#B:MulticastLoopback");
306 //Assert.AreEqual (32, client.Ttl, "#B:Ttl");
307 localEP = s.LocalEndPoint as IPEndPoint;
308 Assert.IsNotNull (localEP, "#B:Client:LocalEndpoint");
309 Assert.AreEqual (IPAddress.IPv6Any, localEP.Address, "#B:Client:LocalEndPoint/Address");
310 Assert.AreEqual (AddressFamily.InterNetworkV6, localEP.AddressFamily, "#B:Client:LocalEndPoint/AddressFamily");
311 Assert.AreEqual (IPEndPoint.MaxPort, localEP.Port, "#B:Client:LocalEndPoint/Port");
315 [Test] // .ctor (Int32, AddressFamily)
316 #if FEATURE_NO_BSD_SOCKETS
317 [ExpectedException (typeof (PlatformNotSupportedException))]
319 public void Constructor5_Family_Invalid ()
322 new UdpClient (80, AddressFamily.NetBios);
324 } catch (ArgumentException ex) {
326 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#A2");
327 Assert.IsNull (ex.InnerException, "#A3");
328 // 'UDP' Client can only accept InterNetwork or InterNetworkV6
330 Assert.IsNotNull (ex.Message, "#A4");
331 Assert.AreEqual ("family", ex.ParamName, "#A5");
335 new UdpClient (80, (AddressFamily) 666);
337 } catch (ArgumentException ex) {
339 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#B2");
340 Assert.IsNull (ex.InnerException, "#B3");
341 // 'UDP' Client can only accept InterNetwork or InterNetworkV6
343 Assert.IsNotNull (ex.Message, "#B4");
344 Assert.AreEqual ("family", ex.ParamName, "#B5");
348 [Test] // .ctor (Int32, AddressFamily)
349 #if FEATURE_NO_BSD_SOCKETS
350 [ExpectedException (typeof (PlatformNotSupportedException))]
352 public void Constructor5_Port_OutOfRange ()
355 new UdpClient (IPEndPoint.MaxPort + 1, AddressFamily.InterNetwork);
357 } catch (ArgumentOutOfRangeException ex) {
358 // Specified argument was out of the range of valid values
359 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#A2");
360 Assert.IsNull (ex.InnerException, "#A3");
361 Assert.IsNotNull (ex.Message, "#A4");
362 Assert.AreEqual ("port", ex.ParamName, "#A5");
366 new UdpClient (IPEndPoint.MinPort - 1, AddressFamily.InterNetwork);
368 } catch (ArgumentOutOfRangeException ex) {
369 // Specified argument was out of the range of valid values
370 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#A2");
371 Assert.IsNull (ex.InnerException, "#A3");
372 Assert.IsNotNull (ex.Message, "#A4");
373 Assert.AreEqual ("port", ex.ParamName, "#A5");
377 [Test] // .ctor (String, Int32)
378 #if FEATURE_NO_BSD_SOCKETS
379 [ExpectedException (typeof (PlatformNotSupportedException))]
381 public void Constructor6 ()
386 using (MyUdpClient client = new MyUdpClient ("127.0.0.1", NetworkHelpers.FindFreePort ()))
389 Assert.IsNotNull (s, "#A:Client");
390 Assert.AreEqual (AddressFamily.InterNetwork, s.AddressFamily, "#A:Client:AddressFamily");
391 Assert.IsTrue (s.Connected, "#A:Client:Connected");
392 Assert.IsTrue (s.IsBound, "#A:Client:IsBound");
393 Assert.AreEqual (ProtocolType.Udp, s.ProtocolType, "#A:Client:ProtocolType");
394 Assert.AreEqual (SocketType.Dgram, s.SocketType, "#A:Client:SocketType");
395 Assert.IsTrue (client.Active, "#A:Active");
396 Assert.IsFalse (client.DontFragment, "#A:DontFragment");
397 Assert.IsFalse (client.EnableBroadcast, "#A:EnableBroadcast");
398 //Assert.IsFalse (client.ExclusiveAddressUse, "#A:ExclusiveAddressUse");
399 //Assert.IsFalse (client.MulticastLoopback, "#A:MulticastLoopback");
400 //Assert.AreEqual (32, client.Ttl, "#A:Ttl");
401 localEP = s.LocalEndPoint as IPEndPoint;
402 Assert.IsNotNull (localEP, "#A:Client:LocalEndpoint");
403 Assert.AreEqual (IPAddress.Loopback, localEP.Address, "#A:Client:LocalEndPoint/Address");
404 Assert.AreEqual (AddressFamily.InterNetwork, localEP.AddressFamily, "#A:Client:LocalEndPoint/AddressFamily");
406 using (MyUdpClient client = new MyUdpClient ("127.0.0.1", IPEndPoint.MaxPort))
409 Assert.IsNotNull (s, "#B:Client");
410 Assert.AreEqual (AddressFamily.InterNetwork, s.AddressFamily, "#B:Client:AddressFamily");
411 Assert.IsTrue (s.Connected, "#B:Client:Connected");
412 Assert.IsTrue (s.IsBound, "#B:Client:IsBound");
413 Assert.AreEqual (ProtocolType.Udp, s.ProtocolType, "#B:Client:ProtocolType");
414 Assert.AreEqual (SocketType.Dgram, s.SocketType, "#B:Client:SocketType");
415 Assert.IsTrue (client.Active, "#B:Active");
416 Assert.IsFalse (client.DontFragment, "#B:DontFragment");
417 Assert.IsFalse (client.EnableBroadcast, "#B:EnableBroadcast");
418 //Assert.IsFalse (client.ExclusiveAddressUse, "#B:ExclusiveAddressUse");
419 //Assert.IsFalse (client.MulticastLoopback, "#B:MulticastLoopback");
420 //Assert.AreEqual (32, client.Ttl, "#B:Ttl");
421 localEP = s.LocalEndPoint as IPEndPoint;
422 Assert.IsNotNull (localEP, "#B:Client:LocalEndpoint");
423 Assert.AreEqual (IPAddress.Loopback, localEP.Address, "#B:Client:LocalEndPoint/Address");
424 Assert.AreEqual (AddressFamily.InterNetwork, localEP.AddressFamily, "#B:Client:LocalEndPoint/AddressFamily");
428 [Test] // .ctor (String, Int32)
429 #if FEATURE_NO_BSD_SOCKETS
430 [ExpectedException (typeof (PlatformNotSupportedException))]
432 public void Constructor6_HostName_Null ()
435 new UdpClient ((string) null, int.MaxValue);
437 } catch (ArgumentNullException ex) {
438 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
439 Assert.IsNull (ex.InnerException, "#3");
440 Assert.IsNotNull (ex.Message, "#4");
441 Assert.AreEqual ("hostname", ex.ParamName, "#5");
445 [Test] // .ctor (String, Int32)
446 #if FEATURE_NO_BSD_SOCKETS
447 [ExpectedException (typeof (PlatformNotSupportedException))]
449 public void Constructor6_Port_OutOfRange ()
452 new UdpClient ("local", IPEndPoint.MaxPort + 1);
454 } catch (ArgumentOutOfRangeException ex) {
455 // Specified argument was out of the range of valid values
456 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#A2");
457 Assert.IsNull (ex.InnerException, "#A3");
458 Assert.IsNotNull (ex.Message, "#A4");
459 Assert.AreEqual ("port", ex.ParamName, "#A5");
463 new UdpClient ("local", IPEndPoint.MinPort - 1);
465 } catch (ArgumentOutOfRangeException ex) {
466 // Specified argument was out of the range of valid values
467 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#A2");
468 Assert.IsNull (ex.InnerException, "#A3");
469 Assert.IsNotNull (ex.Message, "#A4");
470 Assert.AreEqual ("port", ex.ParamName, "#A5");
475 #if FEATURE_NO_BSD_SOCKETS
476 [ExpectedException (typeof (PlatformNotSupportedException))]
478 public void UdpClientBroadcastTest ()
480 UdpClient client = new UdpClient ();
481 byte[] bytes = new byte[] {10, 11, 12, 13};
484 client.Send (bytes, bytes.Length, new IPEndPoint (IPAddress.Broadcast, NetworkHelpers.FindFreePort ()));
490 [Test] // JoinMulticastGroup (IPAddress)
491 #if FEATURE_NO_BSD_SOCKETS
492 [ExpectedException (typeof (PlatformNotSupportedException))]
494 public void JoinMulticastGroup1_IPv4 ()
496 IPAddress mcast_addr = IPAddress.Parse ("224.0.0.23");
498 using (UdpClient client = new UdpClient (new IPEndPoint (IPAddress.Any, 0))) {
499 client.JoinMulticastGroup (mcast_addr);
503 [Test] // JoinMulticastGroup (IPAddress)
504 #if FEATURE_NO_BSD_SOCKETS
505 [ExpectedException (typeof (PlatformNotSupportedException))]
507 public void JoinMulticastGroup1_IPv6 ()
509 if (!Socket.OSSupportsIPv6)
510 Assert.Ignore ("IPv6 not enabled.");
512 IPAddress mcast_addr = IPAddress.Parse ("ff02::1");
514 using (UdpClient client = new UdpClient (new IPEndPoint (IPAddress.IPv6Any, 0))) {
515 client.JoinMulticastGroup (mcast_addr);
519 [Test] // JoinMulticastGroup (IPAddress)
520 #if FEATURE_NO_BSD_SOCKETS
521 [ExpectedException (typeof (PlatformNotSupportedException))]
523 public void JoinMulticastGroup1_MulticastAddr_Null ()
525 using (UdpClient client = new UdpClient (new IPEndPoint (IPAddress.Loopback, 0))) {
527 client.JoinMulticastGroup ((IPAddress) null);
529 } catch (ArgumentNullException ex) {
530 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
531 Assert.IsNull (ex.InnerException, "#3");
532 Assert.IsNotNull (ex.Message, "#4");
533 Assert.AreEqual ("multicastAddr", ex.ParamName, "#5");
538 [Test] // JoinMulticastGroup (IPAddress)
539 #if FEATURE_NO_BSD_SOCKETS
540 [ExpectedException (typeof (PlatformNotSupportedException))]
542 public void JoinMulticastGroup1_Socket_Closed ()
544 IPAddress mcast_addr = null;
546 UdpClient client = new UdpClient (new IPEndPoint (IPAddress.Loopback, 0));
549 client.JoinMulticastGroup (mcast_addr);
551 } catch (ObjectDisposedException ex) {
552 // Cannot access a disposed object
553 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
554 Assert.IsNull (ex.InnerException, "#3");
555 Assert.IsNotNull (ex.Message, "#4");
556 Assert.AreEqual (typeof (UdpClient).FullName, ex.ObjectName, "#5");
560 [Test] // JoinMulticastGroup (IPAddress)
561 #if FEATURE_NO_BSD_SOCKETS
562 [ExpectedException (typeof (PlatformNotSupportedException))]
564 public void JoinMulticastGroup1_Socket_NotBound ()
566 IPAddress mcast_addr = IPAddress.Parse ("224.0.0.23");
568 using (UdpClient client = new UdpClient (AddressFamily.InterNetwork)) {
569 client.JoinMulticastGroup (mcast_addr);
573 [Test] // JoinMulticastGroup (In32, IPAddress)
574 #if FEATURE_NO_BSD_SOCKETS
575 [ExpectedException (typeof (PlatformNotSupportedException))]
577 public void JoinMulticastGroup2_IPv4 ()
579 IPAddress mcast_addr = IPAddress.Parse ("224.0.0.23");
581 using (UdpClient client = new UdpClient (new IPEndPoint (IPAddress.Any, 0))) {
583 client.JoinMulticastGroup (0, mcast_addr);
585 } catch (SocketException ex) {
586 // The attempted operation is not supported for the type of
588 Assert.AreEqual (typeof (SocketException), ex.GetType (), "#2");
589 Assert.AreEqual (10045, ex.ErrorCode, "#3");
590 Assert.IsNull (ex.InnerException, "#4");
591 Assert.IsNotNull (ex.Message, "#5");
592 Assert.AreEqual (10045, ex.NativeErrorCode, "#6");
593 Assert.AreEqual (SocketError.OperationNotSupported, ex.SocketErrorCode, "#7");
598 [Test] // JoinMulticastGroup (In32, IPAddress)
599 #if FEATURE_NO_BSD_SOCKETS
600 [ExpectedException (typeof (PlatformNotSupportedException))]
602 public void JoinMulticastGroup2_IPv6 ()
604 if (!Socket.OSSupportsIPv6)
605 Assert.Ignore ("IPv6 not enabled.");
607 IPAddress mcast_addr = IPAddress.Parse ("ff02::1");
609 using (UdpClient client = new UdpClient (new IPEndPoint (IPAddress.IPv6Any, 0))) {
610 client.JoinMulticastGroup (0, mcast_addr);
614 [Test] // JoinMulticastGroup (Int32, IPAddress)
615 #if FEATURE_NO_BSD_SOCKETS
616 [ExpectedException (typeof (PlatformNotSupportedException))]
618 public void JoinMulticastGroup2_MulticastAddr_Null ()
620 using (UdpClient client = new UdpClient (new IPEndPoint (IPAddress.Loopback, 0))) {
622 client.JoinMulticastGroup (0, (IPAddress) null);
624 } catch (ArgumentNullException ex) {
625 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
626 Assert.IsNull (ex.InnerException, "#3");
627 Assert.IsNotNull (ex.Message, "#4");
628 Assert.AreEqual ("multicastAddr", ex.ParamName, "#5");
633 [Test] // JoinMulticastGroup (Int32, IPAddress)
634 #if FEATURE_NO_BSD_SOCKETS
635 [ExpectedException (typeof (PlatformNotSupportedException))]
637 public void JoinMulticastGroup2_Socket_Closed ()
639 if (!Socket.OSSupportsIPv6)
640 Assert.Ignore ("IPv6 not enabled.");
642 IPAddress mcast_addr = null;
644 UdpClient client = new UdpClient (new IPEndPoint (IPAddress.IPv6Any, 0));
647 client.JoinMulticastGroup (0, mcast_addr);
649 } catch (ObjectDisposedException ex) {
650 // Cannot access a disposed object
651 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
652 Assert.IsNull (ex.InnerException, "#3");
653 Assert.IsNotNull (ex.Message, "#4");
654 Assert.AreEqual (typeof (UdpClient).FullName, ex.ObjectName, "#5");
658 [Test] // JoinMulticastGroup (Int32, IPAddress)
659 #if FEATURE_NO_BSD_SOCKETS
660 [ExpectedException (typeof (PlatformNotSupportedException))]
662 public void JoinMulticastGroup2_Socket_NotBound ()
664 IPAddress mcast_addr = IPAddress.Parse ("ff02::1");
666 using (UdpClient client = new UdpClient (AddressFamily.InterNetworkV6)) {
667 client.JoinMulticastGroup (0, mcast_addr);
671 [Test] // JoinMulticastGroup (IPAddress, Int32)
672 #if FEATURE_NO_BSD_SOCKETS
673 [ExpectedException (typeof (PlatformNotSupportedException))]
675 public void JoinMulticastGroup3_IPv4 ()
677 IPAddress mcast_addr = IPAddress.Parse ("224.0.0.23");
679 using (UdpClient client = new UdpClient (new IPEndPoint (IPAddress.Any, 0))) {
680 client.JoinMulticastGroup (mcast_addr, 0);
683 using (UdpClient client = new UdpClient (new IPEndPoint (IPAddress.Any, 0))) {
684 client.JoinMulticastGroup (mcast_addr, 255);
688 [Test] // JoinMulticastGroup (IPAddress, Int32)
689 #if FEATURE_NO_BSD_SOCKETS
690 [ExpectedException (typeof (PlatformNotSupportedException))]
692 public void JoinMulticastGroup3_IPv6 ()
694 if (!Socket.OSSupportsIPv6)
695 Assert.Ignore ("IPv6 not enabled.");
697 IPAddress mcast_addr = IPAddress.Parse ("ff02::1");
699 using (UdpClient client = new UdpClient (new IPEndPoint (IPAddress.IPv6Any, 0))) {
700 client.JoinMulticastGroup (mcast_addr, 0);
703 using (UdpClient client = new UdpClient (new IPEndPoint (IPAddress.IPv6Any, 0))) {
704 client.JoinMulticastGroup (mcast_addr, 255);
708 [Test] // JoinMulticastGroup (IPAddress, Int32)
709 #if FEATURE_NO_BSD_SOCKETS
710 [ExpectedException (typeof (PlatformNotSupportedException))]
712 public void JoinMulticastGroup3_MulticastAddr_Null ()
714 using (UdpClient client = new UdpClient (new IPEndPoint (IPAddress.Loopback, 0))) {
716 client.JoinMulticastGroup ((IPAddress) null, int.MaxValue);
718 } catch (ArgumentNullException ex) {
719 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
720 Assert.IsNull (ex.InnerException, "#3");
721 Assert.IsNotNull (ex.Message, "#4");
722 Assert.AreEqual ("multicastAddr", ex.ParamName, "#5");
727 [Test] // JoinMulticastGroup (IPAddress, Int32)
728 #if FEATURE_NO_BSD_SOCKETS
729 [ExpectedException (typeof (PlatformNotSupportedException))]
731 public void JoinMulticastGroup3_Socket_Closed ()
733 IPAddress mcast_addr = null;
735 UdpClient client = new UdpClient (new IPEndPoint (IPAddress.Any, 0));
738 client.JoinMulticastGroup (mcast_addr, 0);
740 } catch (ObjectDisposedException ex) {
741 // Cannot access a disposed object
742 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
743 Assert.IsNull (ex.InnerException, "#3");
744 Assert.IsNotNull (ex.Message, "#4");
745 Assert.AreEqual (typeof (UdpClient).FullName, ex.ObjectName, "#5");
749 [Test] // JoinMulticastGroup (IPAddress, Int32)
750 #if FEATURE_NO_BSD_SOCKETS
751 [ExpectedException (typeof (PlatformNotSupportedException))]
753 public void JoinMulticastGroup3_Socket_NotBound ()
755 IPAddress mcast_addr = IPAddress.Parse ("224.0.0.23");
757 using (UdpClient client = new UdpClient (AddressFamily.InterNetwork)) {
758 client.JoinMulticastGroup (mcast_addr, 5);
762 [Test] // JoinMulticastGroup (IPAddress, IPAddress)
763 #if FEATURE_NO_BSD_SOCKETS
764 [ExpectedException (typeof (PlatformNotSupportedException))]
766 public void JoinMulticastGroup4_IPv4 ()
768 IPAddress mcast_addr = IPAddress.Parse ("224.0.0.23");
769 IPAddress local_addr = IPAddress.Any;
771 using (UdpClient client = new UdpClient (new IPEndPoint (IPAddress.Any, 0))) {
772 client.JoinMulticastGroup (mcast_addr, local_addr);
776 [Test] // JoinMulticastGroup (IPAddress, IPAddress)
777 #if FEATURE_NO_BSD_SOCKETS
778 [ExpectedException (typeof (PlatformNotSupportedException))]
780 public void JoinMulticastGroup4_IPv6 ()
782 if (!Socket.OSSupportsIPv6)
783 Assert.Ignore ("IPv6 not enabled.");
785 IPAddress mcast_addr = IPAddress.Parse ("ff02::1");
786 IPAddress local_addr = IPAddress.IPv6Any;
788 using (UdpClient client = new UdpClient (new IPEndPoint (IPAddress.IPv6Any, 0))) {
790 client.JoinMulticastGroup (mcast_addr, local_addr);
792 } catch (SocketException ex) {
793 // The attempted operation is not supported for the type of
795 Assert.AreEqual (typeof (SocketException), ex.GetType (), "#2");
796 Assert.AreEqual (10045, ex.ErrorCode, "#3");
797 Assert.IsNull (ex.InnerException, "#4");
798 Assert.IsNotNull (ex.Message, "#5");
799 Assert.AreEqual (10045, ex.NativeErrorCode, "#6");
800 Assert.AreEqual (SocketError.OperationNotSupported, ex.SocketErrorCode, "#7");
805 [Test] // JoinMulticastGroup (IPAddress, IPAddress)
806 #if FEATURE_NO_BSD_SOCKETS
807 [ExpectedException (typeof (PlatformNotSupportedException))]
809 public void JoinMulticastGroup4_LocalAddress_Null ()
811 IPAddress mcast_addr = IPAddress.Parse ("224.0.0.23");
813 using (UdpClient client = new UdpClient (new IPEndPoint (IPAddress.Loopback, 0))) {
815 client.JoinMulticastGroup (mcast_addr, (IPAddress) null);
817 } catch (ArgumentNullException ex) {
818 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
819 Assert.IsNull (ex.InnerException, "#3");
820 Assert.IsNotNull (ex.Message, "#4");
821 Assert.AreEqual ("mcint", ex.ParamName, "#5");
826 [Test] // JoinMulticastGroup (IPAddress, IPAddress)
827 #if FEATURE_NO_BSD_SOCKETS
828 [ExpectedException (typeof (PlatformNotSupportedException))]
830 public void JoinMulticastGroup4_MulticastAddr_Null ()
832 using (UdpClient client = new UdpClient (new IPEndPoint (IPAddress.Loopback, 0))) {
834 client.JoinMulticastGroup ((IPAddress) null, IPAddress.Loopback);
836 } catch (ArgumentNullException ex) {
837 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
838 Assert.IsNull (ex.InnerException, "#3");
839 Assert.IsNotNull (ex.Message, "#4");
840 Assert.AreEqual ("group", ex.ParamName, "#5");
845 [Test] // JoinMulticastGroup (IPAddress, IPAddress)
846 #if FEATURE_NO_BSD_SOCKETS
847 [ExpectedException (typeof (PlatformNotSupportedException))]
849 public void JoinMulticastGroup4_Socket_Closed ()
851 IPAddress mcast_addr = null;
852 IPAddress local_addr = null;
854 UdpClient client = new UdpClient (new IPEndPoint (IPAddress.Any, 0));
857 client.JoinMulticastGroup (mcast_addr, local_addr);
859 } catch (ObjectDisposedException ex) {
860 // Cannot access a disposed object
861 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
862 Assert.IsNull (ex.InnerException, "#3");
863 Assert.IsNotNull (ex.Message, "#4");
864 Assert.AreEqual (typeof (UdpClient).FullName, ex.ObjectName, "#5");
868 [Test] // JoinMulticastGroup (IPAddress, IPAddress)
869 #if FEATURE_NO_BSD_SOCKETS
870 [ExpectedException (typeof (PlatformNotSupportedException))]
872 public void JoinMulticastGroup4_Socket_NotBound ()
874 IPAddress mcast_addr = IPAddress.Parse ("224.0.0.23");
875 IPAddress local_addr = Dns.GetHostEntry (string.Empty).AddressList [0];
877 using (UdpClient client = new UdpClient (AddressFamily.InterNetwork)) {
878 client.JoinMulticastGroup (mcast_addr, local_addr);
883 #if FEATURE_NO_BSD_SOCKETS
884 [ExpectedException (typeof (PlatformNotSupportedException))]
886 public void CloseInReceive ()
888 UdpClient client = new UdpClient (NetworkHelpers.FindFreePort ());
890 ManualResetEvent ready = new ManualResetEvent (false);
891 bool got_exc = false;
893 Task receive_task = Task.Factory.StartNew (() => {
894 IPEndPoint ep = new IPEndPoint (IPAddress.Any, 0);
897 client.Receive(ref ep);
898 } catch (SocketException) {
905 ready.WaitOne (2000);
909 Assert.IsTrue (receive_task.Wait (1000));
910 Assert.IsTrue (got_exc);
913 // Test for bug 324033
915 #if FEATURE_NO_BSD_SOCKETS
916 [ExpectedException (typeof (PlatformNotSupportedException))]
918 public void JoinMulticastGroupWithLocal ()
920 UdpClient client = new UdpClient (0);
921 IPAddress mcast_addr = IPAddress.Parse ("224.0.0.24");
922 IPAddress local_addr = IPAddress.Any;
925 client.JoinMulticastGroup (mcast_addr, local_addr);
932 #if FEATURE_NO_BSD_SOCKETS
933 [ExpectedException (typeof (PlatformNotSupportedException))]
935 [ExpectedException (typeof(ArgumentNullException))]
937 public void BeginSendNull ()
939 UdpClient client = new UdpClient ();
940 client.BeginSend (null, 0, null, null);
944 static bool BSSent = false;
946 static ManualResetEvent BSCalledBack = new ManualResetEvent (false);
948 private static void BSCallback (IAsyncResult asyncResult)
950 UdpClient client = (UdpClient)asyncResult.AsyncState;
952 BSBytes = client.EndSend (asyncResult);
959 #if FEATURE_NO_BSD_SOCKETS
960 [ExpectedException (typeof (PlatformNotSupportedException))]
962 public void BeginSend ()
964 UdpClient client = new UdpClient ();
965 byte[] bytes = new byte[] {10, 11, 12, 13};
968 client.BeginSend (bytes, bytes.Length, new AsyncCallback (BSCallback), client);
969 Assert.Fail ("BeginSend #1");
970 } catch (SocketException ex) {
971 Assert.AreEqual (10057, ex.ErrorCode,
976 client.BeginSend (bytes, bytes.Length, null, new AsyncCallback (BSCallback), client);
977 Assert.Fail ("BeginSend #3");
978 } catch (SocketException ex) {
979 Assert.AreEqual (10057, ex.ErrorCode,
983 IPAddress[] addresses = Dns.GetHostEntry (string.Empty).AddressList;
984 IPEndPoint ep = null;
985 foreach (IPAddress a in addresses) {
986 if (a.AddressFamily == AddressFamily.InterNetwork) {
987 ep = new IPEndPoint (a, NetworkHelpers.FindFreePort ());
991 BSCalledBack.Reset ();
993 client.BeginSend (bytes, bytes.Length, ep,
994 new AsyncCallback (BSCallback),
996 if (BSCalledBack.WaitOne (2000, false) == false) {
997 Assert.Fail ("BeginSend wait timed out");
1000 Assert.AreEqual (true, BSSent, "BeginSend #5");
1001 Assert.AreEqual (4, BSBytes, "BeginSend #6");
1006 static bool BRReceived = false;
1007 static byte[] BRBytes;
1008 static IPEndPoint BRFrom;
1009 static ManualResetEvent BRCalledBack = new ManualResetEvent (false);
1011 private static void BRCallback (IAsyncResult asyncResult)
1013 UdpClient client = (UdpClient)asyncResult.AsyncState;
1015 BRBytes = client.EndReceive (asyncResult, ref BRFrom);
1018 BRCalledBack.Set ();
1022 #if FEATURE_NO_BSD_SOCKETS
1023 [ExpectedException (typeof (PlatformNotSupportedException))]
1025 public void BeginReceive ()
1027 var port = NetworkHelpers.FindFreePort ();
1028 UdpClient client = new UdpClient (port);
1030 BRCalledBack.Reset ();
1032 client.BeginReceive (BRCallback, client);
1034 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, port);
1035 byte[] send_bytes = new byte[] {10, 11, 12, 13};
1036 client.Send (send_bytes, send_bytes.Length, ep);
1038 if (BRCalledBack.WaitOne (2000, false) == false) {
1039 Assert.Fail ("BeginReceive wait timed out");
1042 Assert.AreEqual (true, BRReceived, "BeginReceive #1");
1043 Assert.AreEqual (4, BRBytes.Length, "BeginReceive #2");
1044 Assert.AreEqual (ep. Port, BRFrom.Port, "BeginReceive #3");
1045 Assert.AreEqual (ep.Address, BRFrom.Address, "BeginReceive #4");
1051 #if FEATURE_NO_BSD_SOCKETS
1052 [ExpectedException (typeof (PlatformNotSupportedException))]
1054 public void Available ()
1056 var port = NetworkHelpers.FindFreePort ();
1057 using (UdpClient client = new UdpClient (port)) {
1058 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, port);
1059 byte[] bytes = new byte[] {10, 11, 12, 13};
1061 int res = client.Send (bytes, bytes.Length, ep);
1062 Assert.AreEqual (bytes.Length, res, "Send");
1064 // that might happen too quickly, data sent and not yet received/available
1066 int avail = client.Available;
1068 Assert.AreEqual (bytes.Length, avail, "Available #1");
1075 [Category ("NotWorking")] // Using PMTU settings workaround on Linux, default true
1076 public void DontFragmentDefault ()
1078 UdpClient client = new UdpClient ();
1080 /* Ignore the docs, testing shows the default
1081 * here is in fact false
1083 Assert.AreEqual (false, client.DontFragment, "DontFragmentDefault");
1089 #if FEATURE_NO_BSD_SOCKETS
1090 [ExpectedException (typeof (PlatformNotSupportedException))]
1092 public void EnableBroadcastDefault ()
1094 UdpClient client = new UdpClient ();
1096 Assert.AreEqual (false, client.EnableBroadcast, "EnableBroadcastDefault");
1101 /* Can't test the default for ExclusiveAddressUse as
1102 * it's different on different versions and service
1106 [Category ("NotWorking")] // Not supported on Linux
1107 public void ExclusiveAddressUseUnbound ()
1109 UdpClient client = new UdpClient ();
1111 client.ExclusiveAddressUse = true;
1113 Assert.AreEqual (true, client.ExclusiveAddressUse, "ExclusiveAddressUseUnbound");
1119 [ExpectedException (typeof(InvalidOperationException))]
1120 [Category ("NotWorking")] // Not supported on Linux
1121 public void ExclusiveAddressUseBound ()
1123 UdpClient client = new UdpClient (0);
1125 client.ExclusiveAddressUse = true;
1131 #if FEATURE_NO_BSD_SOCKETS
1132 [ExpectedException (typeof (PlatformNotSupportedException))]
1134 public void MulticastLoopbackDefault ()
1136 UdpClient client = new UdpClient ();
1138 Assert.AreEqual (true, client.MulticastLoopback, "MulticastLoopbackDefault");
1144 #if FEATURE_NO_BSD_SOCKETS
1145 [ExpectedException (typeof (PlatformNotSupportedException))]
1147 public void ReceiveIPv6 ()
1149 if (!Socket.OSSupportsIPv6)
1150 Assert.Ignore ("IPv6 not enabled.");
1152 int port1 = NetworkHelpers.FindFreePort ();
1153 int port2 = NetworkHelpers.FindFreePort ();
1154 using(var udpClient = new UdpClient (port1, AddressFamily.InterNetworkV6))
1155 using(var udpClient2 = new UdpClient (port2, AddressFamily.InterNetworkV6))
1157 var dataSent = new byte [] {1,2,3};
1158 udpClient2.SendAsync (dataSent, dataSent.Length, "::1", port1);
1160 IPEndPoint endPoint = new IPEndPoint (IPAddress.IPv6Any, 0);
1161 var data = udpClient.Receive (ref endPoint);
1163 Assert.AreEqual (dataSent.Length, data.Length);
1167 /* No test for Ttl default as it is platform dependent */
1169 class MyUdpClient : UdpClient
1171 public MyUdpClient ()
1175 public MyUdpClient (AddressFamily family)
1180 public MyUdpClient (Int32 port)
1186 public MyUdpClient (IPEndPoint localEP)
1191 public MyUdpClient (int port, AddressFamily family)
1192 : base (port, family)
1196 public MyUdpClient (string hostname, int port)
1197 : base (hostname, port)
1201 public new bool Active {
1202 get { return base.Active; }
1203 set { base.Active = value; }