1 // System.Net.Sockets.SocketTest.cs
4 // Brad Fitzpatrick (brad@danga.com)
5 // Gonzalo Paniagua Javier (gonzalo@novell.com)
7 // (C) Copyright 2003 Brad Fitzpatrick
8 // Copyright (c) 2005 Novell, Inc. (http://www.novell.com)
12 using System.Collections;
13 using System.Threading;
15 using System.Net.Sockets;
16 using NUnit.Framework;
19 using System.Collections.Generic;
22 namespace MonoTests.System.Net.Sockets
25 public class SocketTest
27 // note: also used in SocketCas tests
28 public const string BogusAddress = "192.168.244.244";
29 public const int BogusPort = 23483;
32 public void ConnectIPAddressAny ()
34 IPEndPoint ep = new IPEndPoint (IPAddress.Any, 0);
37 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp)) {
42 } catch (SocketException ex) {
43 Assert.AreEqual (10049, ex.ErrorCode, "#2");
47 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
52 } catch (SocketException ex) {
53 Assert.AreEqual (10049, ex.ErrorCode, "#4");
58 [Ignore ("Bug #75158")] // Looks like MS fails after the .ctor, when you try to use the socket
59 public void IncompatibleAddress ()
61 IPEndPoint epIPv6 = new IPEndPoint (IPAddress.IPv6Any,
65 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP)) {
70 } catch (SocketException ex) {
73 int expectedError = 10022;
75 // address incompatible with protocol
76 int expectedError = 10047;
78 Assert.AreEqual (expectedError, ex.ErrorCode,
84 [Category ("InetAccess")]
85 public void EndConnect ()
87 IPAddress ipOne = IPAddress.Parse (BogusAddress);
88 IPEndPoint ipEP = new IPEndPoint (ipOne, BogusPort);
89 Socket sock = new Socket (ipEP.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
90 IAsyncResult ar = sock.BeginConnect (ipEP, null, null);
93 // should raise an exception because connect was bogus
96 } catch (SocketException ex) {
97 Assert.AreEqual (10060, ex.ErrorCode, "#2");
102 [ExpectedException (typeof (ArgumentNullException))]
103 public void SelectEmpty ()
105 ArrayList list = new ArrayList ();
106 Socket.Select (list, list, list, 1000);
109 private bool BlockingConnect (bool block)
111 IPEndPoint ep = new IPEndPoint(IPAddress.Loopback, 1234);
112 Socket server = new Socket(AddressFamily.InterNetwork,
116 server.Blocking=block;
120 Socket conn = new Socket (AddressFamily.InterNetwork,
125 Socket client = server.Accept();
126 bool client_block = client.Blocking;
132 return(client_block);
136 public void AcceptBlockingStatus()
140 block = BlockingConnect(true);
141 Assert.AreEqual (block, true, "BlockingStatus01");
143 block = BlockingConnect(false);
144 Assert.AreEqual (block, false, "BlockingStatus02");
147 static bool CFAConnected = false;
148 static ManualResetEvent CFACalledBack;
150 private static void CFACallback (IAsyncResult asyncResult)
152 Socket sock = (Socket)asyncResult.AsyncState;
153 CFAConnected = sock.Connected;
155 if (sock.Connected) {
156 sock.EndConnect (asyncResult);
159 CFACalledBack.Set ();
162 [Test] // Connect (IPEndPoint)
163 public void Connect1_RemoteEP_Null ()
165 Socket s = new Socket (AddressFamily.InterNetwork,
166 SocketType.Stream, ProtocolType.Tcp);
168 s.Connect ((IPEndPoint) null);
170 } catch (ArgumentNullException ex) {
171 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
172 Assert.IsNull (ex.InnerException, "#3");
173 Assert.IsNotNull (ex.Message, "#4");
174 Assert.AreEqual ("remoteEP", ex.ParamName, "#5");
179 public void ConnectFailAsync ()
181 Socket sock = new Socket (AddressFamily.InterNetwork,
184 sock.Blocking = false;
185 CFACalledBack = new ManualResetEvent (false);
186 CFACalledBack.Reset ();
188 /* Need a port that is not being used for
191 sock.BeginConnect (new IPEndPoint (IPAddress.Loopback,
193 new AsyncCallback (CFACallback),
195 CFACalledBack.WaitOne ();
197 Assert.AreEqual (CFAConnected, false, "ConnectFail");
203 [ExpectedException (typeof (ArgumentException))]
205 public void SetSocketOptionBoolean ()
207 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 1);
208 Socket sock = new Socket (ep.Address.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
210 sock.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.KeepAlive, true);
217 public void TestSelect1 ()
219 Socket srv = CreateServer ();
220 ClientSocket clnt = new ClientSocket (srv.LocalEndPoint);
221 Thread th = new Thread (new ThreadStart (clnt.ConnectSleepClose));
227 ArrayList list = new ArrayList ();
228 ArrayList empty = new ArrayList ();
230 Socket.Select (list, empty, empty, 100);
231 Assert.AreEqual (0, empty.Count, "#01");
232 Assert.AreEqual (1, list.Count, "#02");
233 Socket.Select (empty, list, empty, 100);
234 Assert.AreEqual (0, empty.Count, "#03");
235 Assert.AreEqual (1, list.Count, "#04");
236 Socket.Select (list, empty, empty, -1);
237 Assert.AreEqual (0, empty.Count, "#05");
238 Assert.AreEqual (1, list.Count, "#06");
239 // Need to read the 10 bytes from the client to avoid a RST
240 byte [] bytes = new byte [10];
249 static Socket CreateServer ()
251 Socket sock = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
252 sock.Bind (new IPEndPoint (IPAddress.Loopback, 0));
261 public ClientSocket (EndPoint ep)
264 sock = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
267 public void ConnectSleepClose ()
276 byte [] b = new byte [10];
281 byte[] buf = new byte[100];
284 [ExpectedException (typeof (ObjectDisposedException))]
285 public void Disposed2 ()
287 Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
294 [ExpectedException (typeof (ObjectDisposedException))]
295 public void Disposed6 ()
297 Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
304 [ExpectedException (typeof (ObjectDisposedException))]
305 public void Disposed7 ()
307 Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
314 [ExpectedException (typeof (ObjectDisposedException))]
315 public void Disposed15 ()
317 Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
324 [ExpectedException (typeof (ObjectDisposedException))]
325 public void Disposed16 ()
327 Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
334 [ExpectedException (typeof (ObjectDisposedException))]
335 public void Disposed17 ()
337 Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
344 [ExpectedException (typeof (ObjectDisposedException))]
345 public void Disposed18 ()
347 Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
350 s.Send (buf, 0, 10, 0);
354 [ExpectedException (typeof (ObjectDisposedException))]
355 public void Disposed19 ()
357 Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
358 EndPoint ep = new IPEndPoint (IPAddress.Any, 31337);
361 s.SendTo (buf, 0, ep);
365 [ExpectedException (typeof (ObjectDisposedException))]
366 public void Disposed20 ()
368 Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
369 EndPoint ep = new IPEndPoint (IPAddress.Any, 31337);
372 s.SendTo (buf, 10, 0, ep);
376 [ExpectedException (typeof (ObjectDisposedException))]
377 public void Disposed21 ()
379 Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
380 EndPoint ep = new IPEndPoint (IPAddress.Any, 31337);
383 s.SendTo (buf, 0, 10, 0, ep);
387 [ExpectedException (typeof (ObjectDisposedException))]
388 public void Disposed22 ()
390 Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
391 EndPoint ep = new IPEndPoint (IPAddress.Any, 31337);
398 [ExpectedException (typeof (ObjectDisposedException))]
399 public void Disposed23 ()
401 Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
408 public void GetHashCodeTest ()
410 Socket server = new Socket (AddressFamily.InterNetwork,
411 SocketType.Stream, ProtocolType.Tcp);
412 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
417 Socket client = new Socket (AddressFamily.InterNetwork,
418 SocketType.Stream, ProtocolType.Tcp);
419 int hashcodeA = client.GetHashCode ();
421 int hashcodeB = client.GetHashCode ();
422 Assert.AreEqual (hashcodeA, hashcodeB, "#1");
424 int hashcodeC = client.GetHashCode ();
426 Assert.AreEqual (hashcodeB, hashcodeC, "#2");
428 Assert.IsFalse (hashcodeB == hashcodeC, "#2");
433 static ManualResetEvent SocketError_event = new ManualResetEvent (false);
435 private static void SocketError_callback (IAsyncResult ar)
437 Socket sock = (Socket)ar.AsyncState;
440 sock.EndConnect (ar);
443 SocketError_event.Set ();
447 public void SocketErrorTest ()
449 Socket sock = new Socket (AddressFamily.InterNetwork,
452 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
455 SocketError_event.Reset ();
457 sock.Blocking = false;
458 sock.BeginConnect (ep, new AsyncCallback(SocketError_callback),
461 if (SocketError_event.WaitOne (2000, false) == false) {
462 Assert.Fail ("SocketError wait timed out");
465 Assert.AreEqual (false, sock.Connected, "SocketError #1");
469 error = (int)sock.GetSocketOption (SocketOptionLevel.Socket, SocketOptionName.Error);
470 Assert.AreEqual (10061, error, "SocketError #2");
472 error = (int)sock.GetSocketOption (SocketOptionLevel.Socket, SocketOptionName.Error);
473 Assert.AreEqual (10061, error, "SocketError #3");
481 public void SocketInformationCtor ()
486 public void DontFragmentDefaultTcp ()
488 Socket sock = new Socket (AddressFamily.InterNetwork,
492 Assert.AreEqual (false, sock.DontFragment, "DontFragmentDefaultTcp");
498 [Category ("NotOnMac")] // DontFragment doesn't work on Mac
499 public void DontFragmentChangeTcp ()
501 Socket sock = new Socket (AddressFamily.InterNetwork,
505 sock.DontFragment = true;
507 Assert.AreEqual (true, sock.DontFragment, "DontFragmentChangeTcp");
513 public void DontFragmentDefaultUdp ()
515 Socket sock = new Socket (AddressFamily.InterNetwork,
519 Assert.AreEqual (false, sock.DontFragment, "DontFragmentDefaultUdp");
525 [Category ("NotOnMac")] // DontFragment doesn't work on Mac
526 public void DontFragmentChangeUdp ()
528 Socket sock = new Socket (AddressFamily.InterNetwork,
532 sock.DontFragment = true;
534 Assert.AreEqual (true, sock.DontFragment, "DontFragmentChangeUdp");
540 [ExpectedException (typeof(ObjectDisposedException))]
541 public void DontFragmentClosed ()
543 Socket sock = new Socket (AddressFamily.InterNetwork,
549 bool val = sock.DontFragment;
553 [Category ("NotWorking")] // Need to pick a non-IP AddressFamily that "works" on both mono and ms, this one only works on ms
554 public void DontFragment ()
556 Socket sock = new Socket (AddressFamily.NetBios,
557 SocketType.Seqpacket,
558 ProtocolType.Unspecified);
561 sock.DontFragment = true;
562 Assert.Fail ("DontFragment #1");
563 } catch (NotSupportedException) {
565 Assert.Fail ("DontFragment #2");
572 public void EnableBroadcastDefaultTcp ()
574 Socket sock = new Socket (AddressFamily.InterNetwork,
579 bool value = sock.EnableBroadcast;
580 Assert.Fail ("EnableBroadcastDefaultTcp #1");
581 } catch (SocketException ex) {
582 Assert.AreEqual (10042, ex.ErrorCode, "EnableBroadcastDefaultTcp #2");
584 Assert.Fail ("EnableBroadcastDefaultTcp #2");
591 public void EnableBroadcastDefaultUdp ()
593 Socket sock = new Socket (AddressFamily.InterNetwork,
597 Assert.AreEqual (false, sock.EnableBroadcast, "EnableBroadcastDefaultUdp");
603 public void EnableBroadcastChangeTcp ()
605 Socket sock = new Socket (AddressFamily.InterNetwork,
610 sock.EnableBroadcast = true;
611 Assert.Fail ("EnableBroadcastChangeTcp #1");
612 } catch (SocketException ex) {
613 Assert.AreEqual (10042, ex.ErrorCode, "EnableBroadcastChangeTcp #2");
615 Assert.Fail ("EnableBroadcastChangeTcp #2");
622 public void EnableBroadcastChangeUdp ()
624 Socket sock = new Socket (AddressFamily.InterNetwork,
628 sock.EnableBroadcast = true;
630 Assert.AreEqual (true, sock.EnableBroadcast, "EnableBroadcastChangeUdp");
636 [ExpectedException (typeof(ObjectDisposedException))]
637 public void EnableBroadcastClosed ()
639 Socket sock = new Socket (AddressFamily.InterNetwork,
645 bool val = sock.EnableBroadcast;
648 /* Can't test the default for ExclusiveAddressUse as
649 * it's different on different versions and service
653 [Category ("NotWorking")] // Not supported on Linux
654 public void ExclusiveAddressUseUnbound ()
656 Socket sock = new Socket (AddressFamily.InterNetwork,
660 sock.ExclusiveAddressUse = true;
662 Assert.AreEqual (true, sock.ExclusiveAddressUse, "ExclusiveAddressUseUnbound");
668 [ExpectedException (typeof(InvalidOperationException))]
669 [Category ("NotWorking")] // Not supported on Linux
670 public void ExclusiveAddressUseBound ()
672 Socket sock = new Socket (AddressFamily.InterNetwork,
676 sock.Bind (new IPEndPoint (IPAddress.Any, 1235));
677 sock.ExclusiveAddressUse = true;
682 [ExpectedException (typeof(ObjectDisposedException))]
683 public void ExclusiveAddressUseClosed ()
685 Socket sock = new Socket (AddressFamily.InterNetwork,
691 bool val = sock.ExclusiveAddressUse;
695 public void IsBoundTcp ()
697 Socket sock = new Socket (AddressFamily.InterNetwork,
700 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
703 Assert.AreEqual (false, sock.IsBound, "IsBoundTcp #1");
706 Assert.AreEqual (true, sock.IsBound, "IsBoundTcp #2");
710 Socket sock2 = new Socket (AddressFamily.InterNetwork,
714 Assert.AreEqual (false, sock2.IsBound, "IsBoundTcp #3");
717 Assert.AreEqual (true, sock2.IsBound, "IsBoundTcp #4");
720 Assert.AreEqual (true, sock2.IsBound, "IsBoundTcp #5");
723 Assert.AreEqual (true, sock.IsBound, "IsBoundTcp #6");
727 public void IsBoundUdp ()
729 Socket sock = new Socket (AddressFamily.InterNetwork,
732 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
735 Assert.AreEqual (false, sock.IsBound, "IsBoundUdp #1");
738 Assert.AreEqual (true, sock.IsBound, "IsBoundUdp #2");
741 Assert.AreEqual (true, sock.IsBound, "IsBoundUdp #3");
744 sock = new Socket (AddressFamily.InterNetwork,
748 Assert.AreEqual (false, sock.IsBound, "IsBoundUdp #4");
751 Assert.AreEqual (true, sock.IsBound, "IsBoundUdp #5");
754 Assert.AreEqual (true, sock.IsBound, "IsBoundUdp #6");
758 /* Should not throw an exception */
759 public void IsBoundClosed ()
761 Socket sock = new Socket (AddressFamily.InterNetwork,
767 bool val = sock.IsBound;
770 /* Nothing much to test for LingerState */
773 public void MulticastLoopbackDefaultTcp ()
775 Socket sock = new Socket (AddressFamily.InterNetwork,
780 bool value = sock.MulticastLoopback;
781 Assert.Fail ("MulticastLoopbackDefaultTcp #1");
782 } catch (SocketException ex) {
783 Assert.AreEqual (10042, ex.ErrorCode, "MulticastLoopbackDefaultTcp #2");
785 Assert.Fail ("MulticastLoopbackDefaultTcp #2");
792 public void MulticastLoopbackChangeTcp ()
794 Socket sock = new Socket (AddressFamily.InterNetwork,
799 sock.MulticastLoopback = false;
800 Assert.Fail ("MulticastLoopbackChangeTcp #1");
801 } catch (SocketException ex) {
802 Assert.AreEqual (10042, ex.ErrorCode, "MulticastLoopbackChangeTcp #2");
804 Assert.Fail ("MulticastLoopbackChangeTcp #2");
811 public void MulticastLoopbackDefaultUdp ()
813 Socket sock = new Socket (AddressFamily.InterNetwork,
817 Assert.AreEqual (true, sock.MulticastLoopback, "MulticastLoopbackDefaultUdp");
823 public void MulticastLoopbackChangeUdp ()
825 Socket sock = new Socket (AddressFamily.InterNetwork,
829 sock.MulticastLoopback = false;
831 Assert.AreEqual (false, sock.MulticastLoopback, "MulticastLoopbackChangeUdp");
837 [ExpectedException (typeof(ObjectDisposedException))]
838 public void MulticastLoopbackClosed ()
840 Socket sock = new Socket (AddressFamily.InterNetwork,
846 bool val = sock.MulticastLoopback;
849 /* OSSupportsIPv6 depends on the environment */
852 [Category("NotWorking")] // We have different defaults for perf reasons
853 public void ReceiveBufferSizeDefault ()
855 Socket sock = new Socket (AddressFamily.InterNetwork,
859 Assert.AreEqual (8192, sock.ReceiveBufferSize, "ReceiveBufferSizeDefault");
865 [Category("NotWorking")] // We have different defaults for perf reasons
866 public void ReceiveBufferSizeDefaultUdp ()
868 Socket sock = new Socket (AddressFamily.InterNetwork,
872 Assert.AreEqual (8192, sock.ReceiveBufferSize, "ReceiveBufferSizeDefaultUdp");
878 public void ReceiveBufferSizeChange ()
880 Socket sock = new Socket (AddressFamily.InterNetwork,
884 sock.ReceiveBufferSize = 16384;
886 Assert.AreEqual (16384, sock.ReceiveBufferSize, "ReceiveBufferSizeChange");
892 [ExpectedException (typeof(ObjectDisposedException))]
893 public void ReceiveBufferSizeClosed ()
895 Socket sock = new Socket (AddressFamily.InterNetwork,
901 int val = sock.ReceiveBufferSize;
905 [Category("NotWorking")] // We have different defaults for perf reasons
906 public void SendBufferSizeDefault ()
908 Socket sock = new Socket (AddressFamily.InterNetwork,
912 Assert.AreEqual (8192, sock.SendBufferSize, "SendBufferSizeDefault");
918 [Category("NotWorking")] // We have different defaults for perf reasons
919 public void SendBufferSizeDefaultUdp ()
921 Socket sock = new Socket (AddressFamily.InterNetwork,
925 Assert.AreEqual (8192, sock.SendBufferSize, "SendBufferSizeDefaultUdp");
931 public void SendBufferSizeChange ()
933 Socket sock = new Socket (AddressFamily.InterNetwork,
937 sock.SendBufferSize = 16384;
939 Assert.AreEqual (16384, sock.SendBufferSize, "SendBufferSizeChange");
945 [ExpectedException (typeof(ObjectDisposedException))]
946 public void SendBufferSizeClosed ()
948 Socket sock = new Socket (AddressFamily.InterNetwork,
954 int val = sock.SendBufferSize;
957 /* No test for TTL default as it's platform dependent */
959 public void TtlChange ()
961 Socket sock = new Socket (AddressFamily.InterNetwork,
967 Assert.AreEqual (255, sock.Ttl, "TtlChange");
973 [Category ("NotOnMac")] // Mac doesn't throw when overflowing the ttl
974 public void TtlChangeOverflow ()
976 Socket sock = new Socket (AddressFamily.InterNetwork,
982 Assert.Fail ("TtlChangeOverflow #1");
983 } catch (SocketException ex) {
984 Assert.AreEqual (10022, ex.ErrorCode,
985 "TtlChangeOverflow #2");
987 Assert.Fail ("TtlChangeoverflow #3");
993 /* Apparently you can set TTL=0 on the ms runtime!!
996 Assert.Fail ("TtlChangeOverflow #4");
997 } catch (SocketException ex) {
998 Assert.AreEqual (10022, ex.ErrorCode,
999 "TtlChangeOverflow #5");
1001 Assert.Fail ("TtlChangeOverflow #6");
1008 [ExpectedException (typeof(ObjectDisposedException))]
1009 public void TtlClosed ()
1011 Socket sock = new Socket (AddressFamily.InterNetwork,
1021 public void UseOnlyOverlappedIODefault ()
1023 Socket sock = new Socket (AddressFamily.InterNetwork,
1027 Assert.AreEqual (false, sock.UseOnlyOverlappedIO, "UseOnlyOverlappedIODefault");
1033 // We need this because the Linux kernel in certain configurations
1034 // will end up rounding up the values passed on to the kernel
1035 // for socket send/receive timeouts.
1037 int Approximate (int target, int value)
1041 if (value > target-10 && value < target+10)
1047 public void UseOnlyOverlappedIOChange ()
1049 Socket sock = new Socket (AddressFamily.InterNetwork,
1053 sock.UseOnlyOverlappedIO = true;
1055 Assert.AreEqual (true, sock.UseOnlyOverlappedIO, "UseOnlyOverlappedIOChange");
1061 /* Should not throw an exception */
1062 public void UseOnlyOverlappedIOClosed ()
1064 Socket sock = new Socket (AddressFamily.InterNetwork,
1070 bool val = sock.UseOnlyOverlappedIO;
1074 public void SendTimeoutDefault ()
1076 Socket sock = new Socket (AddressFamily.InterNetwork,
1080 Assert.AreEqual (0, sock.SendTimeout, "SendTimeoutDefault");
1086 public void SendTimeoutChange ()
1088 Socket sock = new Socket (AddressFamily.InterNetwork,
1092 /* Should be rounded up to 500, according to
1093 * the MSDN docs, but the MS runtime doesn't
1095 sock.SendTimeout = 50;
1096 Assert.AreEqual (50, Approximate (50, sock.SendTimeout), "SendTimeoutChange #1");
1098 sock.SendTimeout = 2000;
1099 Assert.AreEqual (2000, Approximate (2000, sock.SendTimeout), "SendTimeoutChange #2");
1101 sock.SendTimeout = 0;
1102 Assert.AreEqual (0, Approximate (0, sock.SendTimeout), "SendTimeoutChange #3");
1104 /* Should be the same as setting 0 */
1105 sock.SendTimeout = -1;
1106 Assert.AreEqual (0, sock.SendTimeout, "SendTimeoutChange #4");
1108 sock.SendTimeout = 65536;
1109 Assert.AreEqual (65536, Approximate (65536, sock.SendTimeout), "SendTimeoutChange #5");
1112 sock.SendTimeout = -2;
1113 Assert.Fail ("SendTimeoutChange #8");
1114 } catch (ArgumentOutOfRangeException) {
1116 Assert.Fail ("SendTimeoutChange #9");
1123 [ExpectedException (typeof(ObjectDisposedException))]
1124 public void SendTimeoutClosed ()
1126 Socket sock = new Socket (AddressFamily.InterNetwork,
1132 int val = sock.SendTimeout;
1136 public void ReceiveTimeoutDefault ()
1138 Socket sock = new Socket (AddressFamily.InterNetwork,
1142 Assert.AreEqual (0, sock.ReceiveTimeout, "ReceiveTimeoutDefault");
1148 public void ReceiveTimeoutChange ()
1150 Socket sock = new Socket (AddressFamily.InterNetwork,
1154 sock.ReceiveTimeout = 50;
1155 Assert.AreEqual (50, Approximate (50, sock.ReceiveTimeout), "ReceiveTimeoutChange #1");
1157 sock.ReceiveTimeout = 2000;
1158 Assert.AreEqual (2000, Approximate (2000, sock.ReceiveTimeout), "ReceiveTimeoutChange #2");
1160 sock.ReceiveTimeout = 0;
1161 Assert.AreEqual (0, sock.ReceiveTimeout, "ReceiveTimeoutChange #3");
1163 /* Should be the same as setting 0 */
1164 sock.ReceiveTimeout = -1;
1165 Assert.AreEqual (0, sock.ReceiveTimeout, "ReceiveTimeoutChange #4");
1167 sock.ReceiveTimeout = 65536;
1168 Assert.AreEqual (65536, Approximate (65536, sock.ReceiveTimeout), "ReceiveTimeoutChange #5");
1171 sock.ReceiveTimeout = -2;
1172 Assert.Fail ("ReceiveTimeoutChange #8");
1173 } catch (ArgumentOutOfRangeException) {
1175 Assert.Fail ("ReceiveTimeoutChange #9");
1182 [ExpectedException (typeof(ObjectDisposedException))]
1183 public void ReceiveTimeoutClosed ()
1185 Socket sock = new Socket (AddressFamily.InterNetwork,
1191 int val = sock.ReceiveTimeout;
1195 public void NoDelayDefaultTcp ()
1197 Socket sock = new Socket (AddressFamily.InterNetwork,
1201 Assert.AreEqual (false, sock.NoDelay, "NoDelayDefaultTcp");
1207 public void NoDelayChangeTcp ()
1209 Socket sock = new Socket (AddressFamily.InterNetwork,
1213 sock.NoDelay = true;
1215 Assert.AreEqual (true, sock.NoDelay, "NoDelayChangeTcp");
1221 public void NoDelayDefaultUdp ()
1223 Socket sock = new Socket (AddressFamily.InterNetwork,
1228 bool val = sock.NoDelay;
1229 Assert.Fail ("NoDelayDefaultUdp #1");
1230 } catch (SocketException ex) {
1231 Assert.AreEqual (10042, ex.ErrorCode,
1232 "NoDelayDefaultUdp #2");
1234 Assert.Fail ("NoDelayDefaultUdp #3");
1241 public void NoDelayChangeUdp ()
1243 Socket sock = new Socket (AddressFamily.InterNetwork,
1248 sock.NoDelay = true;
1249 Assert.Fail ("NoDelayChangeUdp #1");
1250 } catch (SocketException ex) {
1251 Assert.AreEqual (10042, ex.ErrorCode,
1252 "NoDelayChangeUdp #2");
1254 Assert.Fail ("NoDelayChangeUdp #3");
1261 [ExpectedException (typeof(ObjectDisposedException))]
1262 public void NoDelayClosed ()
1264 Socket sock = new Socket (AddressFamily.InterNetwork,
1270 bool val = sock.NoDelay;
1273 static bool BAAccepted = false;
1274 static Socket BASocket = null;
1275 static ManualResetEvent BACalledBack = new ManualResetEvent (false);
1277 private static void BACallback (IAsyncResult asyncResult)
1279 Socket sock = (Socket)asyncResult.AsyncState;
1281 BASocket = sock.EndAccept (asyncResult);
1284 BACalledBack.Set ();
1288 [ExpectedException (typeof(InvalidOperationException))]
1289 public void BeginAcceptNotBound ()
1291 Socket sock = new Socket (AddressFamily.InterNetwork,
1295 sock.BeginAccept (BACallback, sock);
1301 [ExpectedException (typeof(InvalidOperationException))]
1302 public void BeginAcceptNotListening ()
1304 Socket sock = new Socket (AddressFamily.InterNetwork,
1308 sock.Bind (new IPEndPoint (IPAddress.Any, 1236));
1310 sock.BeginAccept (BACallback, sock);
1316 public void BeginAccept ()
1318 Socket sock = new Socket (AddressFamily.InterNetwork,
1321 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
1327 BACalledBack.Reset ();
1329 sock.BeginAccept (BACallback, sock);
1331 Socket conn = new Socket (AddressFamily.InterNetwork,
1337 if (BACalledBack.WaitOne (2000, false) == false) {
1338 Assert.Fail ("BeginAccept wait timed out");
1341 Assert.AreEqual (true, BAAccepted, "BeginAccept #1");
1342 Assert.AreEqual (true, BASocket.Connected, "BeginAccept #2");
1343 Assert.AreEqual (false, sock.Connected, "BeginAccept #3");
1344 Assert.AreEqual (true, conn.Connected, "BeginAccept #4");
1352 [ExpectedException (typeof(ObjectDisposedException))]
1353 public void BeginAcceptClosed ()
1355 Socket sock = new Socket (AddressFamily.InterNetwork,
1361 sock.BeginAccept (BACallback, sock);
1364 static bool BADAccepted = false;
1365 static Socket BADSocket = null;
1366 static byte[] BADBytes;
1367 static int BADByteCount;
1368 static ManualResetEvent BADCalledBack = new ManualResetEvent (false);
1370 private static void BADCallback (IAsyncResult asyncResult)
1372 Socket sock = (Socket)asyncResult.AsyncState;
1374 BADSocket = sock.EndAccept (out BADBytes,
1379 BADCalledBack.Set ();
1383 public void BeginAcceptData ()
1385 Socket sock = new Socket (AddressFamily.InterNetwork,
1388 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
1394 BADCalledBack.Reset ();
1396 sock.BeginAccept (256, BADCallback, sock);
1398 Socket conn = new Socket (AddressFamily.InterNetwork,
1401 byte[] send_bytes = new byte[] {10, 11, 12, 13};
1404 conn.Send (send_bytes);
1406 if (BADCalledBack.WaitOne (2000, false) == false) {
1407 Assert.Fail ("BeginAcceptData wait timed out");
1410 Assert.AreEqual (true, BADAccepted, "BeginAcceptData #1");
1411 Assert.AreEqual (true, BADSocket.Connected, "BeginAcceptData #2");
1412 Assert.AreEqual (false, sock.Connected, "BeginAcceptData #3");
1413 Assert.AreEqual (true, conn.Connected, "BeginAcceptData #4");
1414 Assert.AreEqual (send_bytes.Length, BADByteCount, "BeginAcceptData #5");
1416 /* The MS runtime gives the returned data in a
1417 * much bigger array. TODO: investigate
1418 * whether it the size correlates to the first
1419 * parameter in BeginAccept()
1421 Assert.IsFalse (BADBytes.Length == send_bytes.Length,
1422 "BeginAcceptData #6");
1424 for(int i = 0; i < send_bytes.Length; i++) {
1425 Assert.AreEqual (send_bytes[i], BADBytes[i], "BeginAcceptData #" + (i+7).ToString ());
1434 [ExpectedException (typeof(ObjectDisposedException))]
1435 public void BeginAcceptDataClosed ()
1437 Socket sock = new Socket (AddressFamily.InterNetwork,
1443 sock.BeginAccept (256, BADCallback, sock);
1447 public void BeginAcceptSocketUdp ()
1449 Socket sock = new Socket (AddressFamily.InterNetwork,
1452 Socket acc = new Socket (AddressFamily.InterNetwork,
1456 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
1463 sock.BeginAccept (acc, 256, BADCallback, sock);
1464 Assert.Fail ("BeginAcceptSocketUdp #1");
1465 } catch (SocketException ex) {
1466 Assert.AreEqual (10022, ex.ErrorCode, "BeginAcceptSocketUdp #2");
1468 Assert.Fail ("BeginAcceptSocketUdp #3");
1476 public void BeginAcceptSocketBound ()
1478 Socket sock = new Socket (AddressFamily.InterNetwork,
1481 Socket acc = new Socket (AddressFamily.InterNetwork,
1485 IPEndPoint ep1 = new IPEndPoint (IPAddress.Loopback,
1488 IPEndPoint ep2 = new IPEndPoint (IPAddress.Loopback,
1497 sock.BeginAccept (acc, 256, BADCallback, sock);
1498 Assert.Fail ("BeginAcceptSocketBound #1");
1499 } catch (InvalidOperationException) {
1501 Assert.Fail ("BeginAcceptSocketBound #2");
1509 public void BeginAcceptSocket ()
1511 Socket sock = new Socket (AddressFamily.InterNetwork,
1514 Socket acc = new Socket (AddressFamily.InterNetwork,
1518 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
1524 BADCalledBack.Reset ();
1526 sock.BeginAccept (acc, 256, BADCallback, sock);
1528 Socket conn = new Socket (AddressFamily.InterNetwork,
1531 byte[] send_bytes = new byte[] {10, 11, 12, 13};
1534 conn.Send (send_bytes);
1536 if (BADCalledBack.WaitOne (2000, false) == false) {
1537 Assert.Fail ("BeginAcceptSocket wait timed out");
1540 Assert.AreEqual (true, BADAccepted, "BeginAcceptSocket #1");
1541 Assert.AreEqual (true, BADSocket.Connected, "BeginAcceptSocket #2");
1542 Assert.AreEqual (false, sock.Connected, "BeginAcceptSocket #3");
1543 Assert.AreEqual (true, conn.Connected, "BeginAcceptSocket #4");
1544 Assert.AreEqual (send_bytes.Length, BADByteCount, "BeginAcceptSocket #5");
1545 Assert.AreEqual (AddressFamily.InterNetwork, acc.AddressFamily, "BeginAcceptSocket #6");
1546 Assert.AreEqual (SocketType.Stream, acc.SocketType, "BeginAcceptSocket #7");
1547 Assert.AreEqual (ProtocolType.Tcp, acc.ProtocolType, "BeginAcceptSocket #8");
1548 Assert.AreEqual (conn.LocalEndPoint, acc.RemoteEndPoint, "BeginAcceptSocket #9");
1550 /* The MS runtime gives the returned data in a
1551 * much bigger array. TODO: investigate
1552 * whether it the size correlates to the first
1553 * parameter in BeginAccept()
1555 Assert.IsFalse (BADBytes.Length == send_bytes.Length,
1556 "BeginAcceptSocket #10");
1558 for(int i = 0; i < send_bytes.Length; i++) {
1559 Assert.AreEqual (send_bytes[i], BADBytes[i], "BeginAcceptSocket #" + (i+11).ToString ());
1569 public void BeginAcceptSocketClosed ()
1571 Socket sock = new Socket (AddressFamily.InterNetwork,
1574 Socket acc = new Socket (AddressFamily.InterNetwork,
1581 sock.BeginAccept (acc, 256, BADCallback, null);
1582 Assert.Fail ("BeginAcceptSocketClosed #1");
1583 } catch (ObjectDisposedException) {
1585 Assert.Fail ("BeginAcceptSocketClosed #2");
1592 public void BeginAcceptSocketAccClosed ()
1594 Socket sock = new Socket (AddressFamily.InterNetwork,
1597 Socket acc = new Socket (AddressFamily.InterNetwork,
1600 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
1608 BADCalledBack.Reset ();
1611 sock.BeginAccept (acc, 256, BADCallback, null);
1612 Assert.Fail ("BeginAcceptSocketAccClosed #1");
1613 } catch (ObjectDisposedException) {
1615 Assert.Fail ("BeginAcceptSocketAccClosed #2");
1621 static bool BCConnected = false;
1622 static ManualResetEvent BCCalledBack = new ManualResetEvent (false);
1624 private static void BCCallback (IAsyncResult asyncResult)
1626 Socket sock = (Socket)asyncResult.AsyncState;
1628 sock.EndConnect (asyncResult);
1631 BCCalledBack.Set ();
1635 public void BeginConnectAddressPort ()
1637 Socket sock = new Socket (AddressFamily.InterNetwork,
1640 Socket listen = new Socket (AddressFamily.InterNetwork,
1643 IPAddress ip = IPAddress.Loopback;
1644 IPEndPoint ep = new IPEndPoint (ip, 1244);
1649 BCCalledBack.Reset ();
1651 BCConnected = false;
1653 sock.BeginConnect (ip, 1244, BCCallback, sock);
1655 if (BCCalledBack.WaitOne (2000, false) == false) {
1656 Assert.Fail ("BeginConnectAddressPort wait timed out");
1659 Assert.AreEqual (true, BCConnected, "BeginConnectAddressPort #1");
1666 public void BeginConnectAddressPortNull ()
1668 Socket sock = new Socket (AddressFamily.InterNetwork,
1671 IPAddress ip = null;
1674 sock.BeginConnect (ip, 1244, BCCallback,
1676 Assert.Fail ("BeginConnectAddressPortNull #1");
1677 } catch (ArgumentNullException) {
1679 Assert.Fail ("BeginConnectAddressPortNull #2");
1686 public void BeginConnectAddressPortListen ()
1688 Socket sock = new Socket (AddressFamily.InterNetwork,
1691 IPAddress ip = IPAddress.Loopback;
1692 IPEndPoint ep = new IPEndPoint (ip, 1245);
1698 sock.BeginConnect (ip, 1245, BCCallback, sock);
1699 Assert.Fail ("BeginConnectAddressPortListen #1");
1700 } catch (InvalidOperationException) {
1702 Assert.Fail ("BeginConnectAddressPortListen #2");
1709 [ExpectedException (typeof(ObjectDisposedException))]
1710 public void BeginConnectAddressPortClosed ()
1712 Socket sock = new Socket (AddressFamily.InterNetwork,
1715 IPAddress ip = IPAddress.Loopback;
1719 sock.BeginConnect (ip, 1244, BCCallback, sock);
1723 [Category ("NotOnMac")] // MacOSX will block attempting to connect to 127.0.0.4 causing the test to fail
1724 public void BeginConnectMultiple ()
1726 Socket sock = new Socket (AddressFamily.InterNetwork,
1729 Socket listen = new Socket (AddressFamily.InterNetwork,
1732 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
1734 IPAddress[] ips = new IPAddress[4];
1736 ips[0] = IPAddress.Parse ("127.0.0.4");
1737 ips[1] = IPAddress.Parse ("127.0.0.3");
1738 ips[2] = IPAddress.Parse ("127.0.0.2");
1739 ips[3] = IPAddress.Parse ("127.0.0.1");
1744 BCCalledBack.Reset ();
1746 BCConnected = false;
1748 sock.BeginConnect (ips, 1246, BCCallback, sock);
1750 /* Longer wait here, because the ms runtime
1751 * takes a lot longer to not connect
1753 if (BCCalledBack.WaitOne (10000, false) == false) {
1754 Assert.Fail ("BeginConnectMultiple wait failed");
1757 Assert.AreEqual (true, BCConnected, "BeginConnectMultiple #1");
1758 Assert.AreEqual (AddressFamily.InterNetwork, sock.RemoteEndPoint.AddressFamily, "BeginConnectMultiple #2");
1759 IPEndPoint remep = (IPEndPoint)sock.RemoteEndPoint;
1761 Assert.AreEqual (IPAddress.Loopback, remep.Address, "BeginConnectMultiple #2");
1768 public void BeginConnectMultipleNull ()
1770 Socket sock = new Socket (AddressFamily.InterNetwork,
1773 IPAddress[] ips = null;
1776 sock.BeginConnect (ips, 1246, BCCallback,
1778 Assert.Fail ("BeginConnectMultipleNull #1");
1779 } catch (ArgumentNullException) {
1781 Assert.Fail ("BeginConnectMultipleNull #2");
1788 public void BeginConnectMultipleListen ()
1790 Socket sock = new Socket (AddressFamily.InterNetwork,
1793 IPAddress[] ips = new IPAddress[4];
1794 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
1797 ips[0] = IPAddress.Parse ("127.0.0.4");
1798 ips[1] = IPAddress.Parse ("127.0.0.3");
1799 ips[2] = IPAddress.Parse ("127.0.0.2");
1800 ips[3] = IPAddress.Parse ("127.0.0.1");
1806 sock.BeginConnect (ips, 1247, BCCallback,
1808 Assert.Fail ("BeginConnectMultipleListen #1");
1809 } catch (InvalidOperationException) {
1811 Assert.Fail ("BeginConnectMultipleListen #2");
1818 [ExpectedException (typeof(ObjectDisposedException))]
1819 public void BeginConnectMultipleClosed ()
1821 Socket sock = new Socket (AddressFamily.InterNetwork,
1824 IPAddress[] ips = new IPAddress[4];
1826 ips[0] = IPAddress.Parse ("127.0.0.4");
1827 ips[1] = IPAddress.Parse ("127.0.0.3");
1828 ips[2] = IPAddress.Parse ("127.0.0.2");
1829 ips[3] = IPAddress.Parse ("127.0.0.1");
1833 sock.BeginConnect (ips, 1247, BCCallback, sock);
1837 public void BeginConnectHostPortNull ()
1839 Socket sock = new Socket (AddressFamily.InterNetwork,
1844 sock.BeginConnect ((string)null, 0,
1846 Assert.Fail ("BeginConnectHostPort #1");
1847 } catch (ArgumentNullException) {
1849 Assert.Fail ("BeginConnectHostPort #2");
1856 public void BeginConnectHostPortListen ()
1858 Socket sock = new Socket (AddressFamily.InterNetwork,
1861 IPAddress ip = IPAddress.Loopback;
1862 IPEndPoint ep = new IPEndPoint (ip, 1248);
1868 sock.BeginConnect ("localhost", 1248,
1870 Assert.Fail ("BeginConnectHostPortListen #1");
1871 } catch (InvalidOperationException) {
1873 Assert.Fail ("BeginConnectHostPortListen #2");
1880 [Category ("NotWorking")] // Need to pick a non-IP AddressFamily that "works" on both mono and ms, this one only works on ms
1881 public void BeginConnectHostPortNotIP ()
1883 Socket sock = new Socket (AddressFamily.NetBios,
1884 SocketType.Seqpacket,
1885 ProtocolType.Unspecified);
1888 sock.BeginConnect ("localhost", 0, BCCallback,
1890 Assert.Fail ("BeginConnectHostPortNotIP #1");
1891 } catch (NotSupportedException) {
1893 Assert.Fail ("BeginConnectHostPortNotIP #2");
1900 [ExpectedException (typeof(ObjectDisposedException))]
1901 public void BeginConnectHostPortClosed ()
1903 Socket sock = new Socket (AddressFamily.InterNetwork,
1909 sock.BeginConnect ("localhost", 0, BCCallback, sock);
1912 static bool BDDisconnected = false;
1913 static ManualResetEvent BDCalledBack = new ManualResetEvent (false);
1915 private static void BDCallback (IAsyncResult asyncResult)
1917 Socket sock = (Socket)asyncResult.AsyncState;
1919 sock.EndDisconnect (asyncResult);
1920 BDDisconnected = true;
1922 BDCalledBack.Set ();
1926 [Category ("NotDotNet")] // "Needs XP or later"
1927 public void BeginDisconnect ()
1929 Socket sock = new Socket (AddressFamily.InterNetwork,
1932 Socket listen = new Socket (AddressFamily.InterNetwork,
1935 IPAddress ip = IPAddress.Loopback;
1936 IPEndPoint ep = new IPEndPoint (ip, 1254);
1941 sock.Connect (ip, 1254);
1943 Assert.AreEqual (true, sock.Connected, "BeginDisconnect #1");
1945 sock.Shutdown (SocketShutdown.Both);
1947 BDCalledBack.Reset ();
1948 BDDisconnected = false;
1950 sock.BeginDisconnect (false, BDCallback, sock);
1952 if (BDCalledBack.WaitOne (2000, false) == false) {
1953 Assert.Fail ("BeginDisconnect wait timed out");
1956 Assert.AreEqual (true, BDDisconnected, "BeginDisconnect #2");
1957 Assert.AreEqual (false, sock.Connected, "BeginDisconnect #3");
1964 public void BeginReceiveSocketError ()
1969 public void BeginReceiveGeneric ()
1974 public void BeginReceiveGenericSocketError ()
1978 private static void BSCallback (IAsyncResult asyncResult)
1980 Socket sock = (Socket)asyncResult.AsyncState;
1982 sock.EndSend (asyncResult);
1986 public void BeginSendNotConnected ()
1988 Socket sock = new Socket (AddressFamily.InterNetwork,
1992 byte[] send_bytes = new byte[] {10, 11, 12, 13};
1995 sock.BeginSend (send_bytes, 0,
1997 SocketFlags.None, BSCallback,
1999 Assert.Fail ("BeginSendNotConnected #1");
2000 } catch (SocketException ex) {
2001 Assert.AreEqual (10057, ex.ErrorCode, "BeginSendNotConnected #2");
2003 Assert.Fail ("BeginSendNotConnected #3");
2010 public void BeginSendSocketError ()
2015 public void BeginSendGeneric ()
2020 public void BeginSendGenericSocketError ()
2025 public void BindTwice ()
2027 Socket sock = new Socket (AddressFamily.InterNetwork,
2030 IPEndPoint ep1 = new IPEndPoint (IPAddress.Loopback,
2032 IPEndPoint ep2 = new IPEndPoint (IPAddress.Loopback,
2039 Assert.Fail ("BindTwice #1");
2040 } catch (SocketException ex) {
2041 Assert.AreEqual (10022, ex.ErrorCode, "BindTwice #2");
2043 Assert.Fail ("BindTwice #3");
2050 public void Close ()
2052 Socket sock = new Socket (AddressFamily.InterNetwork,
2055 Socket listen = new Socket (AddressFamily.InterNetwork,
2058 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
2066 Assert.AreEqual (true, sock.Connected, "Close #1");
2070 Thread.Sleep (3000);
2072 Assert.AreEqual (false, sock.Connected, "Close #2");
2078 public void ConnectAddressPort ()
2080 Socket sock = new Socket (AddressFamily.InterNetwork,
2083 Socket listen = new Socket (AddressFamily.InterNetwork,
2086 IPAddress ip = IPAddress.Loopback;
2087 IPEndPoint ep = new IPEndPoint (ip, 1249);
2092 sock.Connect (ip, 1249);
2094 Assert.AreEqual (true, sock.Connected, "ConnectAddressPort #1");
2101 public void ConnectAddressPortNull ()
2103 Socket sock = new Socket (AddressFamily.InterNetwork,
2106 IPAddress ip = null;
2109 sock.Connect (ip, 1249);
2110 Assert.Fail ("ConnectAddressPortNull #1");
2111 } catch (ArgumentNullException) {
2113 Assert.Fail ("ConnectAddressPortNull #2");
2120 public void ConnectAddressPortListen ()
2122 Socket sock = new Socket (AddressFamily.InterNetwork,
2125 IPAddress ip = IPAddress.Loopback;
2126 IPEndPoint ep = new IPEndPoint (ip, 1250);
2132 sock.Connect (ip, 1250);
2133 Assert.Fail ("ConnectAddressPortListen #1");
2134 } catch (InvalidOperationException) {
2136 Assert.Fail ("ConnectAddressPortListen #2");
2143 [ExpectedException (typeof(ObjectDisposedException))]
2144 public void ConnectAddressPortClosed ()
2146 Socket sock = new Socket (AddressFamily.InterNetwork,
2149 IPAddress ip = IPAddress.Loopback;
2153 sock.Connect (ip, 1250);
2157 [Category ("NotOnMac")] // MacOSX trashes the fd after the failed connect attempt to 127.0.0.4
2158 public void ConnectMultiple ()
2160 Socket sock = new Socket (AddressFamily.InterNetwork,
2163 Socket listen = new Socket (AddressFamily.InterNetwork,
2166 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
2168 IPAddress[] ips = new IPAddress[4];
2170 ips[0] = IPAddress.Parse ("127.0.0.4");
2171 ips[1] = IPAddress.Parse ("127.0.0.3");
2172 ips[2] = IPAddress.Parse ("127.0.0.2");
2173 ips[3] = IPAddress.Parse ("127.0.0.1");
2178 sock.Connect (ips, 1251);
2180 Assert.AreEqual (true, sock.Connected, "ConnectMultiple #1");
2181 Assert.AreEqual (AddressFamily.InterNetwork, sock.RemoteEndPoint.AddressFamily, "ConnectMultiple #2");
2182 IPEndPoint remep = (IPEndPoint)sock.RemoteEndPoint;
2184 Assert.AreEqual (IPAddress.Loopback, remep.Address, "ConnectMultiple #2");
2191 public void ConnectMultipleNull ()
2193 Socket sock = new Socket (AddressFamily.InterNetwork,
2196 IPAddress[] ips = null;
2199 sock.Connect (ips, 1251);
2200 Assert.Fail ("ConnectMultipleNull #1");
2201 } catch (ArgumentNullException) {
2203 Assert.Fail ("ConnectMultipleNull #2");
2210 public void ConnectMultipleListen ()
2212 Socket sock = new Socket (AddressFamily.InterNetwork,
2215 IPAddress[] ips = new IPAddress[4];
2216 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
2219 ips[0] = IPAddress.Parse ("127.0.0.4");
2220 ips[1] = IPAddress.Parse ("127.0.0.3");
2221 ips[2] = IPAddress.Parse ("127.0.0.2");
2222 ips[3] = IPAddress.Parse ("127.0.0.1");
2228 sock.Connect (ips, 1252);
2229 Assert.Fail ("ConnectMultipleListen #1");
2230 } catch (InvalidOperationException) {
2232 Assert.Fail ("ConnectMultipleListen #2");
2239 [ExpectedException (typeof(ObjectDisposedException))]
2240 public void ConnectMultipleClosed ()
2242 Socket sock = new Socket (AddressFamily.InterNetwork,
2245 IPAddress[] ips = new IPAddress[4];
2247 ips[0] = IPAddress.Parse ("127.0.0.4");
2248 ips[1] = IPAddress.Parse ("127.0.0.3");
2249 ips[2] = IPAddress.Parse ("127.0.0.2");
2250 ips[3] = IPAddress.Parse ("127.0.0.1");
2254 sock.Connect (ips, 1252);
2258 public void ConnectHostPortNull ()
2260 Socket sock = new Socket (AddressFamily.InterNetwork,
2265 sock.Connect ((string)null, 0);
2266 Assert.Fail ("ConnectHostPort #1");
2267 } catch (ArgumentNullException) {
2269 Assert.Fail ("ConnectHostPort #2");
2276 public void ConnectHostPortListen ()
2278 Socket sock = new Socket (AddressFamily.InterNetwork,
2281 IPAddress ip = IPAddress.Loopback;
2282 IPEndPoint ep = new IPEndPoint (ip, 1253);
2288 sock.Connect ("localhost", 1253);
2289 Assert.Fail ("ConnectHostPortListen #1");
2290 } catch (InvalidOperationException) {
2292 Assert.Fail ("ConnectHostPortListen #2");
2299 [Category ("NotWorking")] // Need to pick a non-IP AddressFamily that "works" on both mono and ms, this one only works on ms
2300 public void ConnectHostPortNotIP ()
2302 Socket sock = new Socket (AddressFamily.NetBios,
2303 SocketType.Seqpacket,
2304 ProtocolType.Unspecified);
2307 sock.Connect ("localhost", 0);
2308 Assert.Fail ("ConnectHostPortNotIP #1");
2309 } catch (NotSupportedException) {
2311 Assert.Fail ("ConnectHostPortNotIP #2");
2318 [ExpectedException (typeof(ObjectDisposedException))]
2319 public void ConnectHostPortClosed ()
2321 Socket sock = new Socket (AddressFamily.InterNetwork,
2327 sock.Connect ("localhost", 0);
2331 [Category ("NotDotNet")] // "Needs XP or later"
2332 public void Disconnect ()
2334 Socket sock = new Socket (AddressFamily.InterNetwork,
2337 Socket listen = new Socket (AddressFamily.InterNetwork,
2340 IPAddress ip = IPAddress.Loopback;
2341 IPEndPoint ep = new IPEndPoint (ip, 1255);
2346 sock.Connect (ip, 1255);
2348 Assert.AreEqual (true, sock.Connected, "Disconnect #1");
2350 sock.Shutdown (SocketShutdown.Both);
2352 sock.Disconnect (false);
2354 Assert.AreEqual (false, sock.Connected, "BeginDisconnect #3");
2361 public void DuplicateAndClose ()
2366 public void IOControl ()
2371 public void ReceiveGeneric ()
2375 IPEndPoint endpoint = new IPEndPoint(IPAddress.Loopback, 1258);
2377 Socket listensock = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
2378 listensock.Bind (endpoint);
2379 listensock.Listen(1);
2381 Socket sendsock = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
2382 sendsock.Connect(endpoint);
2384 Socket clientsock = listensock.Accept();
2386 byte[] sendbuf = new byte[256];
2388 for(i = 0; i < 256; i++) {
2389 sendbuf[i] = (byte)i;
2391 for (i = 4; i < 6; i++) {
2392 Assert.AreEqual (sendbuf[i], (byte)i,
2393 "#1/" + i.ToString());
2397 sendsock.Send (sendbuf, 0, 256, SocketFlags.None,
2401 byte[] recvbuf = new byte[256];
2402 List<ArraySegment<byte>> recvbuflist = new List<ArraySegment<byte>>(2);
2403 recvbuflist.Add(new ArraySegment<byte>(recvbuf, 4, 2));
2404 recvbuflist.Add(new ArraySegment<byte>(recvbuf, 20, 230));
2406 clientsock.Receive (recvbuflist);
2408 /* recvbuf should now hold the first 2 bytes
2409 * of sendbuf from pos 4, and the next 230
2410 * bytes of sendbuf from pos 20
2413 for (i = 0; i < 2; i++) {
2414 Assert.AreEqual (sendbuf[i], recvbuf[i + 4],
2415 "#2/" + i.ToString());
2417 for (i = 2; i < 232; i++) {
2418 Assert.AreEqual (sendbuf[i], recvbuf[i + 18],
2419 "#2/" + i.ToString());
2423 clientsock.Close ();
2424 listensock.Close ();
2428 public void SendGeneric ()
2432 IPEndPoint endpoint = new IPEndPoint(IPAddress.Loopback, 1259);
2434 Socket listensock = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
2435 listensock.Bind (endpoint);
2436 listensock.Listen(1);
2438 Socket sendsock = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
2439 sendsock.Connect(endpoint);
2441 Socket clientsock = listensock.Accept();
2443 byte[] sendbuf = new byte[256];
2444 List<ArraySegment<byte>> sendbuflist = new List<ArraySegment<byte>>(2);
2446 sendbuflist.Add(new ArraySegment<byte>(sendbuf, 4, 2));
2447 sendbuflist.Add(new ArraySegment<byte>(sendbuf, 20, 230));
2449 for(i = 0; i < 256; i++) {
2450 sendbuf[i] = (byte)i;
2452 for (i = 4; i < 6; i++) {
2453 Assert.AreEqual (sendbuf[i], (byte)i,
2454 "#1/" + i.ToString());
2458 sendsock.Send (sendbuflist, SocketFlags.None, out err);
2461 byte[] recvbuf = new byte[256];
2463 clientsock.Receive (recvbuf);
2465 /* The first 2 bytes of recvbuf should now
2466 * hold 2 bytes of sendbuf from pos 4, and the
2467 * next 230 bytes of recvbuf should be sendbuf
2471 for (i = 0; i < 2; i++) {
2472 Assert.AreEqual (recvbuf[i], sendbuf[i + 4],
2473 "#2/" + i.ToString());
2475 for (i = 2; i < 232; i++) {
2476 Assert.AreEqual (recvbuf[i], sendbuf[i + 18],
2477 "#2/" + i.ToString());
2481 clientsock.Close ();
2482 listensock.Close ();
2486 public void ListenNotBound ()
2488 Socket sock = new Socket (AddressFamily.InterNetwork,
2494 Assert.Fail ("ListenNotBound #1");
2495 } catch (SocketException ex) {
2496 Assert.AreEqual (10022, ex.ErrorCode, "ListenNotBound #2");
2498 Assert.Fail ("ListenNotBound #3");
2505 static Socket CWRSocket;
2506 static bool CWRReceiving = true;
2507 static ManualResetEvent CWRReady = new ManualResetEvent (false);
2509 private static void CWRReceiveThread ()
2511 byte[] buf = new byte[256];
2514 CWRSocket.Receive (buf);
2515 } catch (SocketException) {
2516 CWRReceiving = false;
2523 public void CloseWhileReceiving ()
2525 CWRSocket = new Socket (AddressFamily.InterNetwork,
2528 CWRSocket.Bind (new IPEndPoint (IPAddress.Loopback,
2531 Thread recv_thread = new Thread (new ThreadStart (CWRReceiveThread));
2533 recv_thread.Start ();
2534 Thread.Sleep (250); /* Wait for the thread to be already receiving */
2537 if (CWRReady.WaitOne (1000, false) == false) {
2538 Assert.Fail ("CloseWhileReceiving wait timed out");
2541 Assert.IsFalse (CWRReceiving);
2544 static bool RRCLastRead = false;
2545 static ManualResetEvent RRCReady = new ManualResetEvent (false);
2547 private static void RRCClientThread ()
2549 byte[] bytes = new byte[8];
2552 Socket sock = new Socket (AddressFamily.InterNetwork,
2555 sock.Connect (new IPEndPoint (IPAddress.Loopback,
2558 NetworkStream stream = new NetworkStream (sock);
2560 readbyte = stream.ReadByte ();
2561 Assert.AreEqual (0, readbyte, "ReceiveRemoteClosed #1");
2563 stream.Read (bytes, 0, 0);
2565 readbyte = stream.ReadByte ();
2566 Assert.AreEqual (0, readbyte, "ReceiveRemoteClosed #2");
2568 stream.Read (bytes, 0, 0);
2570 readbyte = stream.ReadByte ();
2571 Assert.AreEqual (-1, readbyte, "ReceiveRemoteClosed #3");
2579 [Test] // Receive (Byte [])
2580 public void Receive1_Buffer_Null ()
2582 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
2586 s.Receive ((byte []) null);
2588 } catch (ArgumentNullException ex) {
2589 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
2590 Assert.IsNull (ex.InnerException, "#3");
2591 Assert.IsNotNull (ex.Message, "#4");
2592 Assert.AreEqual ("buffer", ex.ParamName, "#5");
2598 [Test] // Receive (Byte [])
2599 public void Receive1_Socket_Closed ()
2601 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
2606 s.Receive ((byte []) null);
2608 } catch (ObjectDisposedException ex) {
2609 // Cannot access a disposed object
2610 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
2611 Assert.IsNull (ex.InnerException, "#3");
2612 Assert.IsNotNull (ex.Message, "#4");
2613 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
2617 [Test] // Receive (Byte [], SocketFlags)
2618 public void Receive2_Buffer_Null ()
2620 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
2624 s.Receive ((byte []) null, (SocketFlags) 666);
2626 } catch (ArgumentNullException ex) {
2627 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
2628 Assert.IsNull (ex.InnerException, "#3");
2629 Assert.IsNotNull (ex.Message, "#4");
2630 Assert.AreEqual ("buffer", ex.ParamName, "#5");
2636 [Test] // Receive (Byte [], SocketFlags)
2637 public void Receive2_Socket_Closed ()
2639 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
2644 s.Receive ((byte []) null, (SocketFlags) 666);
2646 } catch (ObjectDisposedException ex) {
2647 // Cannot access a disposed object
2648 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
2649 Assert.IsNull (ex.InnerException, "#3");
2650 Assert.IsNotNull (ex.Message, "#4");
2651 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
2655 [Test] // Receive (Byte [], Int32, SocketFlags)
2656 public void Receive3_Buffer_Null ()
2658 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
2662 s.Receive ((byte []) null, 0, (SocketFlags) 666);
2664 } catch (ArgumentNullException ex) {
2665 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
2666 Assert.IsNull (ex.InnerException, "#3");
2667 Assert.IsNotNull (ex.Message, "#4");
2668 Assert.AreEqual ("buffer", ex.ParamName, "#5");
2674 [Test] // Receive (Byte [], Int32, SocketFlags)
2675 public void Receive3_Socket_Closed ()
2677 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
2682 s.Receive ((byte []) null, 0, (SocketFlags) 666);
2684 } catch (ObjectDisposedException ex) {
2685 // Cannot access a disposed object
2686 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
2687 Assert.IsNull (ex.InnerException, "#3");
2688 Assert.IsNotNull (ex.Message, "#4");
2689 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
2693 [Test] // Receive (Byte [], Int32, Int32, SocketFlags)
2694 public void Receive4_Buffer_Null ()
2696 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
2700 s.Receive ((byte []) null, 0, 0, (SocketFlags) 666);
2702 } catch (ArgumentNullException ex) {
2703 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
2704 Assert.IsNull (ex.InnerException, "#3");
2705 Assert.IsNotNull (ex.Message, "#4");
2706 Assert.AreEqual ("buffer", ex.ParamName, "#5");
2712 [Test] // Receive (Byte [], Int32, Int32, SocketFlags)
2713 public void Receive4_Socket_Closed ()
2715 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
2720 s.Receive ((byte []) null, 0, 0, (SocketFlags) 666);
2722 } catch (ObjectDisposedException ex) {
2723 // Cannot access a disposed object
2724 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
2725 Assert.IsNull (ex.InnerException, "#3");
2726 Assert.IsNotNull (ex.Message, "#4");
2727 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
2732 [Test] // Receive (Byte [], Int32, Int32, SocketFlags, out SocketError)
2733 public void Receive5_Buffer_Null ()
2735 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
2740 s.Receive ((byte []) null, 0, 0, SocketFlags.None, out error);
2742 } catch (ArgumentNullException ex) {
2743 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
2744 Assert.IsNull (ex.InnerException, "#3");
2745 Assert.IsNotNull (ex.Message, "#4");
2746 Assert.AreEqual ("buffer", ex.ParamName, "#5");
2752 [Test] // Receive (Byte [], Int32, Int32, SocketFlags, out SocketError)
2753 public void Receive5_Socket_Closed ()
2755 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
2761 s.Receive ((byte []) null, 0, 0, SocketFlags.None, out error);
2763 } catch (ObjectDisposedException ex) {
2764 // Cannot access a disposed object
2765 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
2766 Assert.IsNull (ex.InnerException, "#3");
2767 Assert.IsNotNull (ex.Message, "#4");
2768 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
2772 [Test] // Receive (IList<ArraySegment<Byte>>)
2773 public void Receive6_Buffers_Null ()
2775 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
2779 s.Receive ((IList<ArraySegment<byte>>) null);
2781 } catch (ArgumentNullException ex) {
2782 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
2783 Assert.IsNull (ex.InnerException, "#3");
2784 Assert.IsNotNull (ex.Message, "#4");
2785 Assert.AreEqual ("buffers", ex.ParamName, "#5");
2791 [Test] // Receive (IList<ArraySegment<Byte>>)
2792 public void Receive6_Socket_Closed ()
2794 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
2799 s.Receive ((IList<ArraySegment<byte>>) null);
2801 } catch (ObjectDisposedException ex) {
2802 // Cannot access a disposed object
2803 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
2804 Assert.IsNull (ex.InnerException, "#3");
2805 Assert.IsNotNull (ex.Message, "#4");
2806 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
2810 [Test] // Receive (IList<ArraySegment<Byte>>, SocketFlags)
2811 public void Receive7_Buffers_Null ()
2813 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
2817 s.Receive ((IList<ArraySegment<byte>>) null, (SocketFlags) 666);
2819 } catch (ArgumentNullException ex) {
2820 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
2821 Assert.IsNull (ex.InnerException, "#3");
2822 Assert.IsNotNull (ex.Message, "#4");
2823 Assert.AreEqual ("buffers", ex.ParamName, "#5");
2829 [Test] // Receive (IList<ArraySegment<Byte>>, SocketFlags)
2830 public void Receive7_Socket_Closed ()
2832 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
2837 s.Receive ((IList<ArraySegment<byte>>) null, (SocketFlags) 666);
2839 } catch (ObjectDisposedException ex) {
2840 // Cannot access a disposed object
2841 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
2842 Assert.IsNull (ex.InnerException, "#3");
2843 Assert.IsNotNull (ex.Message, "#4");
2844 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
2848 [Test] // Receive (IList<ArraySegment<Byte>>, SocketFlags, out SocketError)
2849 public void Receive8_Buffers_Null ()
2851 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
2856 s.Receive ((IList<ArraySegment<byte>>) null, (SocketFlags) 666,
2859 } catch (ArgumentNullException ex) {
2860 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
2861 Assert.IsNull (ex.InnerException, "#3");
2862 Assert.IsNotNull (ex.Message, "#4");
2863 Assert.AreEqual ("buffers", ex.ParamName, "#5");
2869 [Test] // Receive (IList<ArraySegment<Byte>>, SocketFlags, out SocketError)
2870 public void Receive8_Socket_Closed ()
2872 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
2878 s.Receive ((IList<ArraySegment<byte>>) null, (SocketFlags) 666,
2881 } catch (ObjectDisposedException ex) {
2882 // Cannot access a disposed object
2883 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
2884 Assert.IsNull (ex.InnerException, "#3");
2885 Assert.IsNotNull (ex.Message, "#4");
2886 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
2893 [Test] // ReceiveFrom (Byte [], ref EndPoint)
2894 public void ReceiveFrom1_Buffer_Null ()
2896 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
2899 EndPoint remoteEP = new IPEndPoint (IPAddress.Loopback, 8001);
2901 s.ReceiveFrom ((Byte []) null, ref remoteEP);
2903 } catch (ArgumentNullException ex) {
2904 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
2905 Assert.IsNull (ex.InnerException, "#3");
2906 Assert.IsNotNull (ex.Message, "#4");
2907 Assert.AreEqual ("buffer", ex.ParamName, "#5");
2913 [Test] // ReceiveFrom (Byte [], ref EndPoint)
2914 public void ReceiveFrom1_RemoteEP_Null ()
2916 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
2919 byte [] buffer = new byte [0];
2920 EndPoint remoteEP = null;
2922 s.ReceiveFrom (buffer, ref remoteEP);
2924 } catch (ArgumentNullException ex) {
2925 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
2926 Assert.IsNull (ex.InnerException, "#3");
2927 Assert.IsNotNull (ex.Message, "#4");
2928 Assert.AreEqual ("remoteEP", ex.ParamName, "#5");
2934 [Test] // ReceiveFrom (Byte [], ref EndPoint)
2935 public void ReceiveFrom1_Socket_Closed ()
2937 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
2941 EndPoint remoteEP = new IPEndPoint (IPAddress.Loopback, 8001);
2943 s.ReceiveFrom ((Byte []) null, ref remoteEP);
2945 } catch (ObjectDisposedException ex) {
2946 // Cannot access a disposed object
2947 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
2948 Assert.IsNull (ex.InnerException, "#3");
2949 Assert.IsNotNull (ex.Message, "#4");
2950 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
2954 [Test] // ReceiveFrom (Byte [], SocketFlags, ref EndPoint)
2955 public void ReceiveFrom2_Buffer_Null ()
2957 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
2960 EndPoint remoteEP = new IPEndPoint (IPAddress.Loopback, 8001);
2962 s.ReceiveFrom ((Byte []) null, (SocketFlags) 666, ref remoteEP);
2964 } catch (ArgumentNullException ex) {
2965 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
2966 Assert.IsNull (ex.InnerException, "#3");
2967 Assert.IsNotNull (ex.Message, "#4");
2968 Assert.AreEqual ("buffer", ex.ParamName, "#5");
2974 [Test] // ReceiveFrom (Byte [], SocketFlags, ref EndPoint)
2975 public void ReceiveFrom2_RemoteEP_Null ()
2977 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
2980 byte [] buffer = new byte [5];
2981 EndPoint remoteEP = null;
2983 s.ReceiveFrom (buffer, (SocketFlags) 666, ref remoteEP);
2985 } catch (ArgumentNullException ex) {
2986 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
2987 Assert.IsNull (ex.InnerException, "#3");
2988 Assert.IsNotNull (ex.Message, "#4");
2989 Assert.AreEqual ("remoteEP", ex.ParamName, "#5");
2995 [Test] // ReceiveFrom (Byte [], SocketFlags, ref EndPoint)
2996 public void ReceiveFrom2_Socket_Closed ()
2998 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3002 EndPoint remoteEP = new IPEndPoint (IPAddress.Loopback, 8001);
3004 s.ReceiveFrom ((Byte []) null, (SocketFlags) 666, ref remoteEP);
3006 } catch (ObjectDisposedException ex) {
3007 // Cannot access a disposed object
3008 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
3009 Assert.IsNull (ex.InnerException, "#3");
3010 Assert.IsNotNull (ex.Message, "#4");
3011 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
3015 [Test] // ReceiveFrom (Byte [], Int32, SocketFlags, ref EndPoint)
3016 public void ReceiveFrom3_Buffer_Null ()
3018 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3021 EndPoint remoteEP = new IPEndPoint (IPAddress.Loopback, 8001);
3023 s.ReceiveFrom ((Byte []) null, -1, (SocketFlags) 666,
3026 } catch (ArgumentNullException ex) {
3027 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
3028 Assert.IsNull (ex.InnerException, "#3");
3029 Assert.IsNotNull (ex.Message, "#4");
3030 Assert.AreEqual ("buffer", ex.ParamName, "#5");
3036 [Test] // ReceiveFrom (Byte [], Int32, SocketFlags, ref EndPoint)
3037 public void ReceiveFrom3_RemoteEP_Null ()
3039 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3042 byte [] buffer = new byte [5];
3043 EndPoint remoteEP = null;
3045 s.ReceiveFrom (buffer, -1, (SocketFlags) 666, ref remoteEP);
3047 } catch (ArgumentNullException ex) {
3048 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
3049 Assert.IsNull (ex.InnerException, "#3");
3050 Assert.IsNotNull (ex.Message, "#4");
3051 Assert.AreEqual ("remoteEP", ex.ParamName, "#5");
3057 [Test] // ReceiveFrom (Byte [], Int32, SocketFlags, ref EndPoint)
3058 public void ReceiveFrom3_Size_OutOfRange ()
3061 byte [] buffer = new byte [5];
3062 EndPoint remoteEP = new IPEndPoint (IPAddress.Loopback, 8001);
3065 s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3068 s.ReceiveFrom (buffer, -1, (SocketFlags) 666, ref remoteEP);
3069 Assert.Fail ("#A1");
3070 } catch (ArgumentOutOfRangeException ex) {
3071 // Specified argument was out of the range of valid values
3072 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#A2");
3073 Assert.IsNull (ex.InnerException, "#A3");
3074 Assert.IsNotNull (ex.Message, "#A4");
3075 Assert.AreEqual ("size", ex.ParamName, "#A5");
3080 // size > buffer length
3081 s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3084 s.ReceiveFrom (buffer, (buffer.Length + 1), (SocketFlags) 666,
3086 Assert.Fail ("#B1");
3087 } catch (ArgumentOutOfRangeException ex) {
3088 // Specified argument was out of the range of valid values
3089 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#B2");
3090 Assert.IsNull (ex.InnerException, "#B3");
3091 Assert.IsNotNull (ex.Message, "#B4");
3092 Assert.AreEqual ("size", ex.ParamName, "#B5");
3098 [Test] // ReceiveFrom (Byte [], Int32, SocketFlags, ref EndPoint)
3099 public void ReceiveFrom3_Socket_Closed ()
3101 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3105 EndPoint remoteEP = new IPEndPoint (IPAddress.Loopback, 8001);
3107 s.ReceiveFrom ((Byte []) null, -1, (SocketFlags) 666,
3110 } catch (ObjectDisposedException ex) {
3111 // Cannot access a disposed object
3112 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
3113 Assert.IsNull (ex.InnerException, "#3");
3114 Assert.IsNotNull (ex.Message, "#4");
3115 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
3119 [Test] // ReceiveFrom (Byte [], Int32, Int32, SocketFlags, EndPoint)
3120 public void ReceiveFrom4_Buffer_Null ()
3122 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3124 EndPoint remoteEP = new IPEndPoint (IPAddress.Loopback, 8001);
3127 s.ReceiveFrom ((Byte []) null, -1, -1, (SocketFlags) 666,
3130 } catch (ArgumentNullException ex) {
3131 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
3132 Assert.IsNull (ex.InnerException, "#3");
3133 Assert.IsNotNull (ex.Message, "#4");
3134 Assert.AreEqual ("buffer", ex.ParamName, "#5");
3138 [Test] // ReceiveFrom (Byte [], Int32, Int32, SocketFlags, EndPoint)
3139 public void ReceiveFrom4_Offset_OutOfRange ()
3142 byte [] buffer = new byte [5];
3143 EndPoint remoteEP = new IPEndPoint (IPAddress.Loopback, 8001);
3146 s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3149 s.ReceiveFrom (buffer, -1, 0, (SocketFlags) 666,
3151 Assert.Fail ("#A1");
3152 } catch (ArgumentOutOfRangeException ex) {
3153 // Specified argument was out of the range of valid values
3154 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#A2");
3155 Assert.IsNull (ex.InnerException, "#A3");
3156 Assert.IsNotNull (ex.Message, "#A4");
3157 Assert.AreEqual ("offset", ex.ParamName, "#A5");
3162 // offset > buffer length
3163 s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3166 s.ReceiveFrom (buffer, (buffer.Length + 1), 0, (SocketFlags) 666,
3168 Assert.Fail ("#B1");
3169 } catch (ArgumentOutOfRangeException ex) {
3170 // Specified argument was out of the range of valid values
3171 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#B2");
3172 Assert.IsNull (ex.InnerException, "#B3");
3173 Assert.IsNotNull (ex.Message, "#B4");
3174 Assert.AreEqual ("offset", ex.ParamName, "#B5");
3180 [Test] // ReceiveFrom (Byte [], Int32, Int32, SocketFlags, ref IPEndPoint)
3181 public void ReceiveFrom4_RemoteEP_Null ()
3183 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3185 byte [] buffer = new byte [5];
3186 EndPoint remoteEP = null;
3189 s.ReceiveFrom (buffer, -1, -1, (SocketFlags) 666, ref remoteEP);
3191 } catch (ArgumentNullException ex) {
3192 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
3193 Assert.IsNull (ex.InnerException, "#3");
3194 Assert.IsNotNull (ex.Message, "#4");
3195 Assert.AreEqual ("remoteEP", ex.ParamName, "#5");
3201 [Test] // ReceiveFrom (Byte [], Int32, Int32, SocketFlags, EndPoint)
3202 public void ReceiveFrom4_Size_OutOfRange ()
3205 byte [] buffer = new byte [5];
3206 EndPoint remoteEP = new IPEndPoint (IPAddress.Loopback, 8001);
3209 s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3212 s.ReceiveFrom (buffer, 0, -1, (SocketFlags) 666,
3214 Assert.Fail ("#A1");
3215 } catch (ArgumentOutOfRangeException ex) {
3216 // Specified argument was out of the range of valid values
3217 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#A2");
3218 Assert.IsNull (ex.InnerException, "#A3");
3219 Assert.IsNotNull (ex.Message, "#A4");
3220 Assert.AreEqual ("size", ex.ParamName, "#A5");
3225 // size > buffer length
3226 s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3229 s.ReceiveFrom (buffer, 0, (buffer.Length + 1), (SocketFlags) 666,
3231 Assert.Fail ("#B1");
3232 } catch (ArgumentOutOfRangeException ex) {
3233 // Specified argument was out of the range of valid values
3234 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#B2");
3235 Assert.IsNull (ex.InnerException, "#B3");
3236 Assert.IsNotNull (ex.Message, "#B4");
3237 Assert.AreEqual ("size", ex.ParamName, "#B5");
3242 // offset + size > buffer length
3243 s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3246 s.ReceiveFrom (buffer, 2, 4, (SocketFlags) 666, ref remoteEP);
3247 Assert.Fail ("#C1");
3248 } catch (ArgumentOutOfRangeException ex) {
3249 // Specified argument was out of the range of valid values
3250 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#C2");
3251 Assert.IsNull (ex.InnerException, "#C3");
3252 Assert.IsNotNull (ex.Message, "#C4");
3253 Assert.AreEqual ("size", ex.ParamName, "#C5");
3259 [Test] // ReceiveFrom (Byte [], Int32, Int32, SocketFlags, ref EndPoint)
3260 public void ReceiveFrom4_Socket_Closed ()
3262 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3266 byte [] buffer = new byte [5];
3267 EndPoint remoteEP = new IPEndPoint (IPAddress.Loopback, 8001);
3269 s.ReceiveFrom (buffer, -1, -1, (SocketFlags) 666,
3272 } catch (ObjectDisposedException ex) {
3273 // Cannot access a disposed object
3274 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
3275 Assert.IsNull (ex.InnerException, "#3");
3276 Assert.IsNotNull (ex.Message, "#4");
3277 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
3282 public void ReceiveRemoteClosed ()
3284 Socket sock = new Socket (AddressFamily.InterNetwork,
3287 sock.Bind (new IPEndPoint (IPAddress.Loopback, 1257));
3291 Thread client_thread = new Thread (new ThreadStart (RRCClientThread));
3292 client_thread.Start ();
3294 Socket client = sock.Accept ();
3295 NetworkStream stream = new NetworkStream (client);
3296 stream.WriteByte (0x00);
3297 stream.WriteByte (0x00);
3301 RRCReady.WaitOne (1000, false);
3302 Assert.IsTrue (RRCLastRead);
3306 // Test case for bug #471580
3308 public void UdpDoubleBind ()
3310 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
3311 s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, 1);
3313 s.Bind (new IPEndPoint (IPAddress.Any, 12345));
3315 Socket ss = new Socket (AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
3316 ss.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, 1);
3318 ss.Bind (new IPEndPoint (IPAddress.Any, 12345));
3320 // If we make it this far, we succeeded.
3328 public void ConnectedProperty ()
3330 TcpListener listener = new TcpListener (IPAddress.Loopback, 23456);
3333 Socket client = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
3334 client.Connect (IPAddress.Loopback, 23456);
3335 Socket server = listener.AcceptSocket ();
3338 server.EndSend(server.BeginSend (new byte[10], 0, 10, SocketFlags.None, null, null));
3341 server.EndReceive (server.BeginReceive (new byte[10], 0, 10, SocketFlags.None, null, null));
3344 Assert.IsTrue (!client.Connected);
3345 Assert.IsTrue (!server.Connected);
3354 [Test] // GetSocketOption (SocketOptionLevel, SocketOptionName)
3355 public void GetSocketOption1_Socket_Closed ()
3357 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
3360 s.GetSocketOption (0, 0);
3362 } catch (ObjectDisposedException ex) {
3363 // Cannot access a disposed object
3364 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
3365 Assert.IsNull (ex.InnerException, "#3");
3366 Assert.IsNotNull (ex.Message, "#4");
3367 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
3371 [Test] // GetSocketOption (SocketOptionLevel, SocketOptionName, Byte [])
3372 public void GetSocketOption2_OptionValue_Null ()
3374 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
3376 s.GetSocketOption (SocketOptionLevel.Socket, SocketOptionName.Linger,
3379 } catch (SocketException ex) {
3380 // The system detected an invalid pointer address in attempting
3381 // to use a pointer argument in a call
3382 Assert.AreEqual (typeof (SocketException), ex.GetType (), "#2");
3383 Assert.AreEqual (10014, ex.ErrorCode, "#3");
3384 Assert.IsNull (ex.InnerException, "#4");
3385 Assert.IsNotNull (ex.Message, "#5");
3386 Assert.AreEqual (10014, ex.NativeErrorCode, "#6");
3388 Assert.AreEqual (SocketError.Fault, ex.SocketErrorCode, "#7");
3393 [Test] // GetSocketOption (SocketOptionLevel, SocketOptionName, Byte [])
3394 public void GetSocketOption2_Socket_Closed ()
3396 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
3399 s.GetSocketOption (0, 0, (byte []) null);
3401 } catch (ObjectDisposedException ex) {
3402 // Cannot access a disposed object
3403 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
3404 Assert.IsNull (ex.InnerException, "#3");
3405 Assert.IsNotNull (ex.Message, "#4");
3406 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
3410 [Test] // GetSocketOption (SocketOptionLevel, SocketOptionName, Int32)
3411 public void GetSocketOption3_Socket_Closed ()
3413 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
3416 s.GetSocketOption (0, 0, 0);
3418 } catch (ObjectDisposedException ex) {
3419 // Cannot access a disposed object
3420 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
3421 Assert.IsNull (ex.InnerException, "#3");
3422 Assert.IsNotNull (ex.Message, "#4");
3423 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
3427 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Byte [])
3428 public void SetSocketOption1_DontLinger ()
3430 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
3431 s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.DontLinger,
3432 new byte [] { 0x00 });
3433 s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.DontLinger,
3434 new byte [] { 0x01 });
3438 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Byte [])
3439 public void SetSocketOption1_DontLinger_Null ()
3441 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
3443 s.SetSocketOption (SocketOptionLevel.Socket,
3444 SocketOptionName.DontLinger, (byte []) null);
3446 } catch (SocketException ex) {
3447 // The system detected an invalid pointer address in attempting
3448 // to use a pointer argument in a call
3449 Assert.AreEqual (typeof (SocketException), ex.GetType (), "#2");
3450 Assert.AreEqual (10014, ex.ErrorCode, "#3");
3451 Assert.IsNull (ex.InnerException, "#4");
3452 Assert.IsNotNull (ex.Message, "#5");
3453 Assert.AreEqual (10014, ex.NativeErrorCode, "#6");
3455 Assert.AreEqual (SocketError.Fault, ex.SocketErrorCode, "#7");
3461 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Byte [])
3462 public void SetSocketOption1_Linger_Null ()
3464 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
3466 s.SetSocketOption (SocketOptionLevel.Socket,
3467 SocketOptionName.DontLinger, (byte []) null);
3469 } catch (SocketException ex) {
3470 // The system detected an invalid pointer address in attempting
3471 // to use a pointer argument in a call
3472 Assert.AreEqual (typeof (SocketException), ex.GetType (), "#2");
3473 Assert.AreEqual (10014, ex.ErrorCode, "#3");
3474 Assert.IsNull (ex.InnerException, "#4");
3475 Assert.IsNotNull (ex.Message, "#5");
3476 Assert.AreEqual (10014, ex.NativeErrorCode, "#6");
3478 Assert.AreEqual (SocketError.Fault, ex.SocketErrorCode, "#7");
3484 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Byte [])
3485 public void SetSocketOption1_Socket_Close ()
3487 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
3490 s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.DontLinger,
3491 new byte [] { 0x00 });
3493 } catch (ObjectDisposedException ex) {
3494 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
3495 Assert.IsNull (ex.InnerException, "#3");
3496 Assert.IsNotNull (ex.Message, "#4");
3497 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
3501 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Int32)
3502 public void SetSocketOption2_DontLinger ()
3504 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
3505 s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.DontLinger, 0);
3506 s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.DontLinger, 5);
3510 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Int32)
3511 [Category ("NotWorking")]
3512 public void SetSocketOption2_Linger ()
3514 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
3515 s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.Linger, 0);
3516 s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.Linger, 5);
3520 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Int32)
3521 public void SetSocketOption2_Socket_Closed ()
3523 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
3526 s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.DontLinger, 0);
3528 } catch (ObjectDisposedException ex) {
3529 // Cannot access a disposed object
3530 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
3531 Assert.IsNull (ex.InnerException, "#3");
3532 Assert.IsNotNull (ex.Message, "#4");
3533 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
3537 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
3538 public void SetSocketOption3_AddMembershipIPv4_IPv6MulticastOption ()
3540 IPAddress mcast_addr = IPAddress.Parse ("239.255.255.250");
3542 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp)) {
3543 s.Bind (new IPEndPoint (IPAddress.Any, 1901));
3545 s.SetSocketOption (SocketOptionLevel.IP, SocketOptionName.AddMembership,
3546 new IPv6MulticastOption (mcast_addr));
3548 } catch (ArgumentException ex) {
3549 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
3550 Assert.IsNull (ex.InnerException, "#3");
3551 Assert.IsNotNull (ex.Message, "#4");
3553 // The specified value is not a valid 'MulticastOption'
3554 Assert.IsTrue (ex.Message.IndexOf ("'MulticastOption'") != -1, "#5:" + ex.Message);
3555 Assert.AreEqual ("optionValue", ex.ParamName, "#6");
3557 Assert.AreEqual ("optionValue", ex.Message, "#5");
3558 Assert.IsNull (ex.ParamName, "#6");
3564 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
3565 public void SetSocketOption3_AddMembershipIPv4_MulticastOption ()
3567 IPAddress mcast_addr = IPAddress.Parse ("239.255.255.250");
3569 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp)) {
3570 s.Bind (new IPEndPoint (IPAddress.Any, 1901));
3571 s.SetSocketOption (SocketOptionLevel.IP, SocketOptionName.AddMembership,
3572 new MulticastOption (mcast_addr));
3576 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
3577 [Category ("NotWorking")]
3578 public void SetSocketOption3_AddMembershipIPv4_Socket_NotBound ()
3580 IPAddress mcast_addr = IPAddress.Parse ("239.255.255.250");
3582 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
3584 s.SetSocketOption (SocketOptionLevel.IP, SocketOptionName.AddMembership,
3585 new MulticastOption (mcast_addr));
3587 } catch (SocketException ex) {
3588 // An invalid argument was supplied
3589 Assert.AreEqual (typeof (SocketException), ex.GetType (), "#2");
3590 Assert.AreEqual (10022, ex.ErrorCode, "#3");
3591 Assert.IsNull (ex.InnerException, "#4");
3592 Assert.IsNotNull (ex.Message, "#5");
3593 Assert.AreEqual (10022, ex.NativeErrorCode, "#6");
3595 Assert.AreEqual (SocketError.InvalidArgument, ex.SocketErrorCode, "#7");
3602 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
3603 public void SetSocketOption3_AddMembershipIPv6_IPv6MulticastOption ()
3606 if (!Socket.OSSupportsIPv6)
3608 if (!Socket.SupportsIPv6)
3610 Assert.Ignore ("IPv6 not enabled.");
3612 IPAddress mcast_addr = IPAddress.Parse ("ff02::1");
3614 using (Socket s = new Socket (AddressFamily.InterNetworkV6, SocketType.Dgram, ProtocolType.Udp)) {
3615 s.Bind (new IPEndPoint (IPAddress.IPv6Any, 1902));
3616 s.SetSocketOption (SocketOptionLevel.IPv6, SocketOptionName.AddMembership,
3617 new IPv6MulticastOption (mcast_addr));
3621 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
3622 public void SetSocketOption3_AddMembershipIPv6_MulticastOption ()
3625 if (!Socket.OSSupportsIPv6)
3627 if (!Socket.SupportsIPv6)
3629 Assert.Ignore ("IPv6 not enabled.");
3631 IPAddress mcast_addr = IPAddress.Parse ("ff02::1");
3633 using (Socket s = new Socket (AddressFamily.InterNetworkV6, SocketType.Dgram, ProtocolType.Udp)) {
3634 s.Bind (new IPEndPoint (IPAddress.IPv6Any, 1902));
3636 s.SetSocketOption (SocketOptionLevel.IPv6, SocketOptionName.AddMembership,
3637 new MulticastOption (mcast_addr));
3639 } catch (ArgumentException ex) {
3640 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
3641 Assert.IsNull (ex.InnerException, "#3");
3642 Assert.IsNotNull (ex.Message, "#4");
3644 // The specified value is not a valid 'IPv6MulticastOption'
3645 Assert.IsTrue (ex.Message.IndexOf ("'IPv6MulticastOption'") != -1, "#5:" + ex.Message);
3646 Assert.AreEqual ("optionValue", ex.ParamName, "#6");
3648 Assert.AreEqual ("optionValue", ex.Message, "#5");
3649 Assert.IsNull (ex.ParamName, "#6");
3655 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
3656 [Category ("NotWorking")]
3657 public void SetSocketOption3_AddMembershipIPv6_Socket_NotBound ()
3659 IPAddress mcast_addr = IPAddress.Parse ("ff02::1");
3661 Socket s = new Socket (AddressFamily.InterNetworkV6, SocketType.Dgram, ProtocolType.Udp);
3663 s.SetSocketOption (SocketOptionLevel.IPv6, SocketOptionName.AddMembership,
3664 new IPv6MulticastOption (mcast_addr));
3666 } catch (SocketException ex) {
3667 // An invalid argument was supplied
3668 Assert.AreEqual (typeof (SocketException), ex.GetType (), "#2");
3669 Assert.AreEqual (10022, ex.ErrorCode, "#3");
3670 Assert.IsNull (ex.InnerException, "#4");
3671 Assert.IsNotNull (ex.Message, "#5");
3672 Assert.AreEqual (10022, ex.NativeErrorCode, "#6");
3674 Assert.AreEqual (SocketError.InvalidArgument, ex.SocketErrorCode, "#7");
3681 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
3682 public void SetSocketOption3_DontLinger_Boolean ()
3684 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
3686 s.SetSocketOption (SocketOptionLevel.Socket,
3687 SocketOptionName.DontLinger, (object) false);
3689 } catch (ArgumentException ex) {
3690 // The specified value is not valid
3691 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
3692 Assert.IsNull (ex.InnerException, "#3");
3694 Assert.IsNotNull (ex.Message, "#4");
3695 Assert.AreEqual ("optionValue", ex.ParamName, "#5");
3697 Assert.AreEqual ("optionValue", ex.Message, "#4");
3698 Assert.IsNull (ex.ParamName, "#5");
3704 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
3705 public void SetSocketOption3_DontLinger_Int32 ()
3707 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
3709 s.SetSocketOption (SocketOptionLevel.Socket,
3710 SocketOptionName.DontLinger, (object) 0);
3712 } catch (ArgumentException ex) {
3713 // The specified value is not valid
3714 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
3715 Assert.IsNull (ex.InnerException, "#3");
3717 Assert.IsNotNull (ex.Message, "#4");
3718 Assert.AreEqual ("optionValue", ex.ParamName, "#5");
3720 Assert.AreEqual ("optionValue", ex.Message, "#4");
3721 Assert.IsNull (ex.ParamName, "#5");
3727 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
3728 public void SetSocketOption3_DontLinger_LingerOption ()
3730 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
3732 s.SetSocketOption (SocketOptionLevel.Socket,
3733 SocketOptionName.DontLinger, new LingerOption (true, 1000));
3735 } catch (ArgumentException ex) {
3736 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
3737 Assert.IsNull (ex.InnerException, "#3");
3739 // The specified value is not valid
3740 Assert.IsNotNull (ex.Message, "#4");
3741 Assert.AreEqual ("optionValue", ex.ParamName, "#5");
3743 Assert.AreEqual ("optionValue", ex.Message, "#4");
3744 Assert.IsNull (ex.ParamName, "#5");
3750 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
3751 public void SetSocketOption3_Linger_Boolean ()
3753 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
3755 s.SetSocketOption (SocketOptionLevel.Socket,
3756 SocketOptionName.Linger, (object) false);
3758 } catch (ArgumentException ex) {
3759 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
3760 Assert.IsNull (ex.InnerException, "#3");
3762 // The specified value is not valid
3763 Assert.IsNotNull (ex.Message, "#4");
3764 Assert.AreEqual ("optionValue", ex.ParamName, "#5");
3766 Assert.AreEqual ("optionValue", ex.Message, "#4");
3767 Assert.IsNull (ex.ParamName, "#5");
3773 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
3774 public void SetSocketOption3_Linger_Int32 ()
3776 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
3778 s.SetSocketOption (SocketOptionLevel.Socket,
3779 SocketOptionName.Linger, (object) 0);
3781 } catch (ArgumentException ex) {
3782 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
3783 Assert.IsNull (ex.InnerException, "#3");
3785 // The specified value is not valid
3786 Assert.IsNotNull (ex.Message, "#4");
3787 Assert.AreEqual ("optionValue", ex.ParamName, "#5");
3789 Assert.AreEqual ("optionValue", ex.Message, "#4");
3790 Assert.IsNull (ex.ParamName, "#5");
3796 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
3797 public void SetSocketOption3_Linger_LingerOption ()
3799 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
3800 s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.Linger,
3801 new LingerOption (false, 0));
3802 s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.Linger,
3803 new LingerOption (true, 0));
3804 s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.Linger,
3805 new LingerOption (false, 1000));
3806 s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.Linger,
3807 new LingerOption (true, 1000));
3811 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
3812 public void SetSocketOption3_DropMembershipIPv4_IPv6MulticastOption ()
3814 IPAddress mcast_addr = IPAddress.Parse ("239.255.255.250");
3816 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp)) {
3817 s.Bind (new IPEndPoint (IPAddress.Any, 1901));
3818 s.SetSocketOption (SocketOptionLevel.IP, SocketOptionName.AddMembership,
3819 new MulticastOption (mcast_addr));
3821 s.SetSocketOption (SocketOptionLevel.IP, SocketOptionName.DropMembership,
3822 new IPv6MulticastOption (mcast_addr));
3824 } catch (ArgumentException ex) {
3825 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
3826 Assert.IsNull (ex.InnerException, "#3");
3827 Assert.IsNotNull (ex.Message, "#4");
3829 // The specified value is not a valid 'MulticastOption'
3830 Assert.IsTrue (ex.Message.IndexOf ("'MulticastOption'") != -1, "#5:" + ex.Message);
3831 Assert.AreEqual ("optionValue", ex.ParamName, "#6");
3833 Assert.AreEqual ("optionValue", ex.Message, "#5");
3834 Assert.IsNull (ex.ParamName, "#6");
3840 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
3841 public void SetSocketOption3_DropMembershipIPv4_MulticastOption ()
3843 IPAddress mcast_addr = IPAddress.Parse ("239.255.255.250");
3845 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp)) {
3846 MulticastOption option = new MulticastOption (mcast_addr);
3848 s.Bind (new IPEndPoint (IPAddress.Any, 1901));
3849 s.SetSocketOption (SocketOptionLevel.IP, SocketOptionName.AddMembership,
3851 s.SetSocketOption (SocketOptionLevel.IP, SocketOptionName.DropMembership,
3856 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
3857 [Category ("NotWorking")]
3858 public void SetSocketOption3_DropMembershipIPv4_Socket_NotBound ()
3860 IPAddress mcast_addr = IPAddress.Parse ("239.255.255.250");
3862 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
3864 s.SetSocketOption (SocketOptionLevel.IP, SocketOptionName.DropMembership,
3865 new MulticastOption (mcast_addr));
3867 } catch (SocketException ex) {
3868 // An invalid argument was supplied
3869 Assert.AreEqual (typeof (SocketException), ex.GetType (), "#2");
3870 Assert.AreEqual (10022, ex.ErrorCode, "#3");
3871 Assert.IsNull (ex.InnerException, "#4");
3872 Assert.IsNotNull (ex.Message, "#5");
3873 Assert.AreEqual (10022, ex.NativeErrorCode, "#6");
3875 Assert.AreEqual (SocketError.InvalidArgument, ex.SocketErrorCode, "#7");
3882 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
3883 public void SetSocketOption3_DropMembershipIPv6_IPv6MulticastOption ()
3886 if (!Socket.OSSupportsIPv6)
3888 if (!Socket.SupportsIPv6)
3890 Assert.Ignore ("IPv6 not enabled.");
3892 using (Socket s = new Socket (AddressFamily.InterNetworkV6, SocketType.Dgram, ProtocolType.Udp)) {
3893 IPv6MulticastOption option = new IPv6MulticastOption (
3894 IPAddress.Parse ("ff02::1"));
3896 s.Bind (new IPEndPoint (IPAddress.IPv6Any, 1902));
3897 s.SetSocketOption (SocketOptionLevel.IPv6, SocketOptionName.AddMembership,
3899 s.SetSocketOption (SocketOptionLevel.IPv6, SocketOptionName.DropMembership,
3904 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
3905 public void SetSocketOption3_DropMembershipIPv6_MulticastOption ()
3908 if (!Socket.OSSupportsIPv6)
3910 if (!Socket.SupportsIPv6)
3912 Assert.Ignore ("IPv6 not enabled.");
3914 IPAddress mcast_addr = IPAddress.Parse ("ff02::1");
3916 using (Socket s = new Socket (AddressFamily.InterNetworkV6, SocketType.Dgram, ProtocolType.Udp)) {
3917 s.Bind (new IPEndPoint (IPAddress.IPv6Any, 1902));
3918 s.SetSocketOption (SocketOptionLevel.IPv6, SocketOptionName.AddMembership,
3919 new IPv6MulticastOption (mcast_addr));
3921 s.SetSocketOption (SocketOptionLevel.IPv6, SocketOptionName.DropMembership,
3922 new MulticastOption (mcast_addr));
3924 } catch (ArgumentException ex) {
3925 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
3926 Assert.IsNull (ex.InnerException, "#3");
3927 Assert.IsNotNull (ex.Message, "#4");
3929 // The specified value is not a valid 'IPv6MulticastOption'
3930 Assert.IsTrue (ex.Message.IndexOf ("'IPv6MulticastOption'") != -1, "#5:" + ex.Message);
3931 Assert.AreEqual ("optionValue", ex.ParamName, "#6");
3933 Assert.AreEqual ("optionValue", ex.Message, "#5");
3934 Assert.IsNull (ex.ParamName, "#6");
3940 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
3941 [Category ("NotWorking")]
3942 public void SetSocketOption3_DropMembershipIPv6_Socket_NotBound ()
3944 IPAddress mcast_addr = IPAddress.Parse ("ff02::1");
3946 Socket s = new Socket (AddressFamily.InterNetworkV6, SocketType.Dgram, ProtocolType.Udp);
3948 s.SetSocketOption (SocketOptionLevel.IPv6, SocketOptionName.DropMembership,
3949 new IPv6MulticastOption (mcast_addr));
3951 } catch (SocketException ex) {
3952 // An invalid argument was supplied
3953 Assert.AreEqual (typeof (SocketException), ex.GetType (), "#2");
3954 Assert.AreEqual (10022, ex.ErrorCode, "#3");
3955 Assert.IsNull (ex.InnerException, "#4");
3956 Assert.IsNotNull (ex.Message, "#5");
3957 Assert.AreEqual (10022, ex.NativeErrorCode, "#6");
3959 Assert.AreEqual (SocketError.InvalidArgument, ex.SocketErrorCode, "#7");
3966 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
3967 public void SetSocketOption3_OptionValue_Null ()
3969 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
3971 s.SetSocketOption (SocketOptionLevel.Socket,
3972 SocketOptionName.Linger, (object) null);
3974 } catch (ArgumentNullException ex) {
3975 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
3976 Assert.IsNull (ex.InnerException, "#3");
3977 Assert.IsNotNull (ex.Message, "#4");
3978 Assert.AreEqual ("optionValue", ex.ParamName, "#5");
3983 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
3984 public void SetSocketOption3_Socket_Closed ()
3986 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
3989 s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.Linger,
3990 new LingerOption (false, 0));
3992 } catch (ObjectDisposedException ex) {
3993 // Cannot access a disposed object
3994 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
3995 Assert.IsNull (ex.InnerException, "#3");
3996 Assert.IsNotNull (ex.Message, "#4");
3997 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");