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);
36 /* UDP sockets use Any to disconnect
38 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp)) {
43 } catch (SocketException ex) {
44 Assert.AreEqual (10049, ex.ErrorCode, "#2");
49 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
54 } catch (SocketException ex) {
55 Assert.AreEqual (10049, ex.ErrorCode, "#4");
60 [Ignore ("Bug #75158")] // Looks like MS fails after the .ctor, when you try to use the socket
61 public void IncompatibleAddress ()
63 IPEndPoint epIPv6 = new IPEndPoint (IPAddress.IPv6Any,
67 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP)) {
72 } catch (SocketException ex) {
75 int expectedError = 10022;
77 // address incompatible with protocol
78 int expectedError = 10047;
80 Assert.AreEqual (expectedError, ex.ErrorCode,
86 [Category ("InetAccess")]
87 public void BogusEndConnect ()
89 IPAddress ipOne = IPAddress.Parse (BogusAddress);
90 IPEndPoint ipEP = new IPEndPoint (ipOne, BogusPort);
91 Socket sock = new Socket (ipEP.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
92 IAsyncResult ar = sock.BeginConnect (ipEP, null, null);
95 // should raise an exception because connect was bogus
98 } catch (SocketException ex) {
99 // Actual error code depends on network configuration.
100 var error = (SocketError) ex.ErrorCode;
101 Assert.That (error == SocketError.TimedOut ||
102 error == SocketError.ConnectionRefused ||
103 error == SocketError.NetworkUnreachable ||
104 error == SocketError.HostUnreachable, "#2");
109 [ExpectedException (typeof (ArgumentNullException))]
110 public void SelectEmpty ()
112 ArrayList list = new ArrayList ();
113 Socket.Select (list, list, list, 1000);
116 private bool BlockingConnect (bool block)
118 IPEndPoint ep = new IPEndPoint(IPAddress.Loopback, 1234);
119 Socket server = new Socket(AddressFamily.InterNetwork,
123 server.Blocking=block;
127 Socket conn = new Socket (AddressFamily.InterNetwork,
132 Socket client = server.Accept();
133 bool client_block = client.Blocking;
139 return(client_block);
143 public void AcceptBlockingStatus()
147 block = BlockingConnect(true);
148 Assert.AreEqual (block, true, "BlockingStatus01");
150 block = BlockingConnect(false);
151 Assert.AreEqual (block, false, "BlockingStatus02");
154 static bool CFAConnected = false;
155 static ManualResetEvent CFACalledBack;
157 private static void CFACallback (IAsyncResult asyncResult)
159 Socket sock = (Socket)asyncResult.AsyncState;
160 CFAConnected = sock.Connected;
162 if (sock.Connected) {
163 sock.EndConnect (asyncResult);
166 CFACalledBack.Set ();
169 [Test] // Connect (IPEndPoint)
170 public void Connect1_RemoteEP_Null ()
172 Socket s = new Socket (AddressFamily.InterNetwork,
173 SocketType.Stream, ProtocolType.Tcp);
175 s.Connect ((IPEndPoint) null);
177 } catch (ArgumentNullException ex) {
178 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
179 Assert.IsNull (ex.InnerException, "#3");
180 Assert.IsNotNull (ex.Message, "#4");
181 Assert.AreEqual ("remoteEP", ex.ParamName, "#5");
186 public void ConnectFailAsync ()
188 Socket sock = new Socket (AddressFamily.InterNetwork,
191 sock.Blocking = false;
192 CFACalledBack = new ManualResetEvent (false);
193 CFACalledBack.Reset ();
195 /* Need a port that is not being used for
198 sock.BeginConnect (new IPEndPoint (IPAddress.Loopback,
200 new AsyncCallback (CFACallback),
202 CFACalledBack.WaitOne ();
204 Assert.AreEqual (CFAConnected, false, "ConnectFail");
210 [ExpectedException (typeof (ArgumentException))]
212 public void SetSocketOptionBoolean ()
214 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 1);
215 Socket sock = new Socket (ep.Address.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
217 sock.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.KeepAlive, true);
224 public void TestSelect1 ()
226 Socket srv = CreateServer ();
227 ClientSocket clnt = new ClientSocket (srv.LocalEndPoint);
228 Thread th = new Thread (new ThreadStart (clnt.ConnectSleepClose));
234 ArrayList list = new ArrayList ();
235 ArrayList empty = new ArrayList ();
237 Socket.Select (list, empty, empty, 100);
238 Assert.AreEqual (0, empty.Count, "#01");
239 Assert.AreEqual (1, list.Count, "#02");
240 Socket.Select (empty, list, empty, 100);
241 Assert.AreEqual (0, empty.Count, "#03");
242 Assert.AreEqual (1, list.Count, "#04");
243 Socket.Select (list, empty, empty, -1);
244 Assert.AreEqual (0, empty.Count, "#05");
245 Assert.AreEqual (1, list.Count, "#06");
246 // Need to read the 10 bytes from the client to avoid a RST
247 byte [] bytes = new byte [10];
256 static Socket CreateServer ()
258 Socket sock = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
259 sock.Bind (new IPEndPoint (IPAddress.Loopback, 0));
268 public ClientSocket (EndPoint ep)
271 sock = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
274 public void ConnectSleepClose ()
283 byte [] b = new byte [10];
288 byte[] buf = new byte[100];
291 [ExpectedException (typeof (ObjectDisposedException))]
292 public void Disposed2 ()
294 Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
301 [ExpectedException (typeof (ObjectDisposedException))]
302 public void Disposed6 ()
304 Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
311 [ExpectedException (typeof (ObjectDisposedException))]
312 public void Disposed7 ()
314 Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
321 [ExpectedException (typeof (ObjectDisposedException))]
322 public void Disposed15 ()
324 Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
331 [ExpectedException (typeof (ObjectDisposedException))]
332 public void Disposed16 ()
334 Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
341 [ExpectedException (typeof (ObjectDisposedException))]
342 public void Disposed17 ()
344 Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
351 [ExpectedException (typeof (ObjectDisposedException))]
352 public void Disposed18 ()
354 Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
357 s.Send (buf, 0, 10, 0);
361 [ExpectedException (typeof (ObjectDisposedException))]
362 public void Disposed19 ()
364 Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
365 EndPoint ep = new IPEndPoint (IPAddress.Any, 31337);
368 s.SendTo (buf, 0, ep);
372 [ExpectedException (typeof (ObjectDisposedException))]
373 public void Disposed20 ()
375 Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
376 EndPoint ep = new IPEndPoint (IPAddress.Any, 31337);
379 s.SendTo (buf, 10, 0, ep);
383 [ExpectedException (typeof (ObjectDisposedException))]
384 public void Disposed21 ()
386 Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
387 EndPoint ep = new IPEndPoint (IPAddress.Any, 31337);
390 s.SendTo (buf, 0, 10, 0, ep);
394 [ExpectedException (typeof (ObjectDisposedException))]
395 public void Disposed22 ()
397 Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
398 EndPoint ep = new IPEndPoint (IPAddress.Any, 31337);
405 [ExpectedException (typeof (ObjectDisposedException))]
406 public void Disposed23 ()
408 Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
415 public void GetHashCodeTest ()
417 Socket server = new Socket (AddressFamily.InterNetwork,
418 SocketType.Stream, ProtocolType.Tcp);
419 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
424 Socket client = new Socket (AddressFamily.InterNetwork,
425 SocketType.Stream, ProtocolType.Tcp);
426 int hashcodeA = client.GetHashCode ();
428 int hashcodeB = client.GetHashCode ();
429 Assert.AreEqual (hashcodeA, hashcodeB, "#1");
431 int hashcodeC = client.GetHashCode ();
433 Assert.AreEqual (hashcodeB, hashcodeC, "#2");
435 Assert.IsFalse (hashcodeB == hashcodeC, "#2");
440 static ManualResetEvent SocketError_event = new ManualResetEvent (false);
442 private static void SocketError_callback (IAsyncResult ar)
444 Socket sock = (Socket)ar.AsyncState;
447 sock.EndConnect (ar);
450 SocketError_event.Set ();
454 public void SocketErrorTest ()
456 Socket sock = new Socket (AddressFamily.InterNetwork,
459 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
462 SocketError_event.Reset ();
464 sock.Blocking = false;
465 sock.BeginConnect (ep, new AsyncCallback(SocketError_callback),
468 if (SocketError_event.WaitOne (2000, false) == false) {
469 Assert.Fail ("SocketError wait timed out");
472 Assert.AreEqual (false, sock.Connected, "SocketError #1");
476 error = (int)sock.GetSocketOption (SocketOptionLevel.Socket, SocketOptionName.Error);
477 Assert.AreEqual (10061, error, "SocketError #2");
479 error = (int)sock.GetSocketOption (SocketOptionLevel.Socket, SocketOptionName.Error);
480 Assert.AreEqual (10061, error, "SocketError #3");
488 public void SocketInformationCtor ()
493 public void DontFragmentDefaultTcp ()
495 Socket sock = new Socket (AddressFamily.InterNetwork,
499 Assert.AreEqual (false, sock.DontFragment, "DontFragmentDefaultTcp");
505 [Category ("NotOnMac")] // DontFragment doesn't work on Mac
506 public void DontFragmentChangeTcp ()
508 Socket sock = new Socket (AddressFamily.InterNetwork,
512 sock.DontFragment = true;
514 Assert.AreEqual (true, sock.DontFragment, "DontFragmentChangeTcp");
520 public void DontFragmentDefaultUdp ()
522 Socket sock = new Socket (AddressFamily.InterNetwork,
526 Assert.AreEqual (false, sock.DontFragment, "DontFragmentDefaultUdp");
532 [Category ("NotOnMac")] // DontFragment doesn't work on Mac
533 public void DontFragmentChangeUdp ()
535 Socket sock = new Socket (AddressFamily.InterNetwork,
539 sock.DontFragment = true;
541 Assert.AreEqual (true, sock.DontFragment, "DontFragmentChangeUdp");
547 [ExpectedException (typeof(ObjectDisposedException))]
548 public void DontFragmentClosed ()
550 Socket sock = new Socket (AddressFamily.InterNetwork,
556 bool val = sock.DontFragment;
560 [Category ("NotWorking")] // Need to pick a non-IP AddressFamily that "works" on both mono and ms, this one only works on ms
561 public void DontFragment ()
563 Socket sock = new Socket (AddressFamily.NetBios,
564 SocketType.Seqpacket,
565 ProtocolType.Unspecified);
568 sock.DontFragment = true;
569 Assert.Fail ("DontFragment #1");
570 } catch (NotSupportedException) {
572 Assert.Fail ("DontFragment #2");
579 public void EnableBroadcastDefaultTcp ()
581 Socket sock = new Socket (AddressFamily.InterNetwork,
586 bool value = sock.EnableBroadcast;
587 Assert.Fail ("EnableBroadcastDefaultTcp #1");
588 } catch (SocketException ex) {
589 Assert.AreEqual (10042, ex.ErrorCode, "EnableBroadcastDefaultTcp #2");
591 Assert.Fail ("EnableBroadcastDefaultTcp #2");
598 public void EnableBroadcastDefaultUdp ()
600 Socket sock = new Socket (AddressFamily.InterNetwork,
604 Assert.AreEqual (false, sock.EnableBroadcast, "EnableBroadcastDefaultUdp");
610 public void EnableBroadcastChangeTcp ()
612 Socket sock = new Socket (AddressFamily.InterNetwork,
617 sock.EnableBroadcast = true;
618 Assert.Fail ("EnableBroadcastChangeTcp #1");
619 } catch (SocketException ex) {
620 Assert.AreEqual (10042, ex.ErrorCode, "EnableBroadcastChangeTcp #2");
622 Assert.Fail ("EnableBroadcastChangeTcp #2");
629 public void EnableBroadcastChangeUdp ()
631 Socket sock = new Socket (AddressFamily.InterNetwork,
635 sock.EnableBroadcast = true;
637 Assert.AreEqual (true, sock.EnableBroadcast, "EnableBroadcastChangeUdp");
643 [ExpectedException (typeof(ObjectDisposedException))]
644 public void EnableBroadcastClosed ()
646 Socket sock = new Socket (AddressFamily.InterNetwork,
652 bool val = sock.EnableBroadcast;
655 /* Can't test the default for ExclusiveAddressUse as
656 * it's different on different versions and service
660 [Category ("NotWorking")] // Not supported on Linux
661 public void ExclusiveAddressUseUnbound ()
663 Socket sock = new Socket (AddressFamily.InterNetwork,
667 sock.ExclusiveAddressUse = true;
669 Assert.AreEqual (true, sock.ExclusiveAddressUse, "ExclusiveAddressUseUnbound");
675 [ExpectedException (typeof(InvalidOperationException))]
676 [Category ("NotWorking")] // Not supported on Linux
677 public void ExclusiveAddressUseBound ()
679 Socket sock = new Socket (AddressFamily.InterNetwork,
683 sock.Bind (new IPEndPoint (IPAddress.Any, 1235));
684 sock.ExclusiveAddressUse = true;
689 [ExpectedException (typeof(ObjectDisposedException))]
690 public void ExclusiveAddressUseClosed ()
692 Socket sock = new Socket (AddressFamily.InterNetwork,
698 bool val = sock.ExclusiveAddressUse;
702 public void IsBoundTcp ()
704 Socket sock = new Socket (AddressFamily.InterNetwork,
707 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
710 Assert.AreEqual (false, sock.IsBound, "IsBoundTcp #1");
713 Assert.AreEqual (true, sock.IsBound, "IsBoundTcp #2");
717 Socket sock2 = new Socket (AddressFamily.InterNetwork,
721 Assert.AreEqual (false, sock2.IsBound, "IsBoundTcp #3");
724 Assert.AreEqual (true, sock2.IsBound, "IsBoundTcp #4");
727 Assert.AreEqual (true, sock2.IsBound, "IsBoundTcp #5");
730 Assert.AreEqual (true, sock.IsBound, "IsBoundTcp #6");
734 public void IsBoundUdp ()
736 Socket sock = new Socket (AddressFamily.InterNetwork,
739 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
742 Assert.AreEqual (false, sock.IsBound, "IsBoundUdp #1");
745 Assert.AreEqual (true, sock.IsBound, "IsBoundUdp #2");
748 Assert.AreEqual (true, sock.IsBound, "IsBoundUdp #3");
751 sock = new Socket (AddressFamily.InterNetwork,
755 Assert.AreEqual (false, sock.IsBound, "IsBoundUdp #4");
758 Assert.AreEqual (true, sock.IsBound, "IsBoundUdp #5");
761 Assert.AreEqual (true, sock.IsBound, "IsBoundUdp #6");
765 /* Should not throw an exception */
766 public void IsBoundClosed ()
768 Socket sock = new Socket (AddressFamily.InterNetwork,
774 bool val = sock.IsBound;
777 /* Nothing much to test for LingerState */
780 public void MulticastLoopbackDefaultTcp ()
782 Socket sock = new Socket (AddressFamily.InterNetwork,
787 bool value = sock.MulticastLoopback;
788 Assert.Fail ("MulticastLoopbackDefaultTcp #1");
789 } catch (SocketException ex) {
790 Assert.AreEqual (10042, ex.ErrorCode, "MulticastLoopbackDefaultTcp #2");
792 Assert.Fail ("MulticastLoopbackDefaultTcp #2");
799 public void MulticastLoopbackChangeTcp ()
801 Socket sock = new Socket (AddressFamily.InterNetwork,
806 sock.MulticastLoopback = false;
807 Assert.Fail ("MulticastLoopbackChangeTcp #1");
808 } catch (SocketException ex) {
809 Assert.AreEqual (10042, ex.ErrorCode, "MulticastLoopbackChangeTcp #2");
811 Assert.Fail ("MulticastLoopbackChangeTcp #2");
818 public void MulticastLoopbackDefaultUdp ()
820 Socket sock = new Socket (AddressFamily.InterNetwork,
824 Assert.AreEqual (true, sock.MulticastLoopback, "MulticastLoopbackDefaultUdp");
830 public void MulticastLoopbackChangeUdp ()
832 Socket sock = new Socket (AddressFamily.InterNetwork,
836 sock.MulticastLoopback = false;
838 Assert.AreEqual (false, sock.MulticastLoopback, "MulticastLoopbackChangeUdp");
844 [ExpectedException (typeof(ObjectDisposedException))]
845 public void MulticastLoopbackClosed ()
847 Socket sock = new Socket (AddressFamily.InterNetwork,
853 bool val = sock.MulticastLoopback;
856 /* OSSupportsIPv6 depends on the environment */
859 [Category("NotWorking")] // We have different defaults for perf reasons
860 public void ReceiveBufferSizeDefault ()
862 Socket sock = new Socket (AddressFamily.InterNetwork,
866 Assert.AreEqual (8192, sock.ReceiveBufferSize, "ReceiveBufferSizeDefault");
872 [Category("NotWorking")] // We have different defaults for perf reasons
873 public void ReceiveBufferSizeDefaultUdp ()
875 Socket sock = new Socket (AddressFamily.InterNetwork,
879 Assert.AreEqual (8192, sock.ReceiveBufferSize, "ReceiveBufferSizeDefaultUdp");
885 public void ReceiveBufferSizeChange ()
887 Socket sock = new Socket (AddressFamily.InterNetwork,
891 sock.ReceiveBufferSize = 16384;
893 Assert.AreEqual (16384, sock.ReceiveBufferSize, "ReceiveBufferSizeChange");
899 [Category("NotWorking")] // We cannot totally remove buffers (minimum is set to 256
900 public void BuffersCheck_None ()
902 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
903 int original = s.ReceiveBufferSize;
904 s.ReceiveBufferSize = 0;
905 Assert.AreEqual (0, s.ReceiveBufferSize, "ReceiveBufferSize " + original.ToString ());
907 original = s.SendBufferSize;
908 s.SendBufferSize = 0;
909 Assert.AreEqual (0, s.SendBufferSize, "SendBufferSize " + original.ToString ());
914 [ExpectedException (typeof(ObjectDisposedException))]
915 public void ReceiveBufferSizeClosed ()
917 Socket sock = new Socket (AddressFamily.InterNetwork,
923 int val = sock.ReceiveBufferSize;
927 [Category("NotWorking")] // We have different defaults for perf reasons
928 public void SendBufferSizeDefault ()
930 Socket sock = new Socket (AddressFamily.InterNetwork,
934 Assert.AreEqual (8192, sock.SendBufferSize, "SendBufferSizeDefault");
940 [Category("NotWorking")] // We have different defaults for perf reasons
941 public void SendBufferSizeDefaultUdp ()
943 Socket sock = new Socket (AddressFamily.InterNetwork,
947 Assert.AreEqual (8192, sock.SendBufferSize, "SendBufferSizeDefaultUdp");
953 public void SendBufferSizeChange ()
955 Socket sock = new Socket (AddressFamily.InterNetwork,
959 sock.SendBufferSize = 16384;
961 Assert.AreEqual (16384, sock.SendBufferSize, "SendBufferSizeChange");
967 [ExpectedException (typeof(ObjectDisposedException))]
968 public void SendBufferSizeClosed ()
970 Socket sock = new Socket (AddressFamily.InterNetwork,
976 int val = sock.SendBufferSize;
979 /* No test for TTL default as it's platform dependent */
981 public void TtlChange ()
983 Socket sock = new Socket (AddressFamily.InterNetwork,
989 Assert.AreEqual (255, sock.Ttl, "TtlChange");
995 [Category ("NotOnMac")] // Mac doesn't throw when overflowing the ttl
996 public void TtlChangeOverflow ()
998 Socket sock = new Socket (AddressFamily.InterNetwork,
1004 Assert.Fail ("TtlChangeOverflow #1");
1005 } catch (SocketException ex) {
1006 Assert.AreEqual (10022, ex.ErrorCode,
1007 "TtlChangeOverflow #2");
1009 Assert.Fail ("TtlChangeoverflow #3");
1015 /* Apparently you can set TTL=0 on the ms runtime!!
1018 Assert.Fail ("TtlChangeOverflow #4");
1019 } catch (SocketException ex) {
1020 Assert.AreEqual (10022, ex.ErrorCode,
1021 "TtlChangeOverflow #5");
1023 Assert.Fail ("TtlChangeOverflow #6");
1030 [ExpectedException (typeof(ObjectDisposedException))]
1031 public void TtlClosed ()
1033 Socket sock = new Socket (AddressFamily.InterNetwork,
1043 public void UseOnlyOverlappedIODefault ()
1045 Socket sock = new Socket (AddressFamily.InterNetwork,
1049 Assert.AreEqual (false, sock.UseOnlyOverlappedIO, "UseOnlyOverlappedIODefault");
1055 // We need this because the Linux kernel in certain configurations
1056 // will end up rounding up the values passed on to the kernel
1057 // for socket send/receive timeouts.
1059 int Approximate (int target, int value)
1063 if (value > target-10 && value < target+10)
1069 public void UseOnlyOverlappedIOChange ()
1071 Socket sock = new Socket (AddressFamily.InterNetwork,
1075 sock.UseOnlyOverlappedIO = true;
1077 Assert.AreEqual (true, sock.UseOnlyOverlappedIO, "UseOnlyOverlappedIOChange");
1083 /* Should not throw an exception */
1084 public void UseOnlyOverlappedIOClosed ()
1086 Socket sock = new Socket (AddressFamily.InterNetwork,
1092 bool val = sock.UseOnlyOverlappedIO;
1096 public void SendTimeoutDefault ()
1098 Socket sock = new Socket (AddressFamily.InterNetwork,
1102 Assert.AreEqual (0, sock.SendTimeout, "SendTimeoutDefault");
1108 public void SendTimeoutChange ()
1110 Socket sock = new Socket (AddressFamily.InterNetwork,
1114 /* Should be rounded up to 500, according to
1115 * the MSDN docs, but the MS runtime doesn't
1117 sock.SendTimeout = 50;
1118 Assert.AreEqual (50, Approximate (50, sock.SendTimeout), "SendTimeoutChange #1");
1120 sock.SendTimeout = 2000;
1121 Assert.AreEqual (2000, Approximate (2000, sock.SendTimeout), "SendTimeoutChange #2");
1123 sock.SendTimeout = 0;
1124 Assert.AreEqual (0, Approximate (0, sock.SendTimeout), "SendTimeoutChange #3");
1126 /* Should be the same as setting 0 */
1127 sock.SendTimeout = -1;
1128 Assert.AreEqual (0, sock.SendTimeout, "SendTimeoutChange #4");
1130 sock.SendTimeout = 65536;
1131 Assert.AreEqual (65536, Approximate (65536, sock.SendTimeout), "SendTimeoutChange #5");
1134 sock.SendTimeout = -2;
1135 Assert.Fail ("SendTimeoutChange #8");
1136 } catch (ArgumentOutOfRangeException) {
1138 Assert.Fail ("SendTimeoutChange #9");
1145 [ExpectedException (typeof(ObjectDisposedException))]
1146 public void SendTimeoutClosed ()
1148 Socket sock = new Socket (AddressFamily.InterNetwork,
1154 int val = sock.SendTimeout;
1158 public void ReceiveTimeoutDefault ()
1160 Socket sock = new Socket (AddressFamily.InterNetwork,
1164 Assert.AreEqual (0, sock.ReceiveTimeout, "ReceiveTimeoutDefault");
1170 public void ReceiveTimeoutChange ()
1172 Socket sock = new Socket (AddressFamily.InterNetwork,
1176 sock.ReceiveTimeout = 50;
1177 Assert.AreEqual (50, Approximate (50, sock.ReceiveTimeout), "ReceiveTimeoutChange #1");
1179 sock.ReceiveTimeout = 2000;
1180 Assert.AreEqual (2000, Approximate (2000, sock.ReceiveTimeout), "ReceiveTimeoutChange #2");
1182 sock.ReceiveTimeout = 0;
1183 Assert.AreEqual (0, sock.ReceiveTimeout, "ReceiveTimeoutChange #3");
1185 /* Should be the same as setting 0 */
1186 sock.ReceiveTimeout = -1;
1187 Assert.AreEqual (0, sock.ReceiveTimeout, "ReceiveTimeoutChange #4");
1189 sock.ReceiveTimeout = 65536;
1190 Assert.AreEqual (65536, Approximate (65536, sock.ReceiveTimeout), "ReceiveTimeoutChange #5");
1193 sock.ReceiveTimeout = -2;
1194 Assert.Fail ("ReceiveTimeoutChange #8");
1195 } catch (ArgumentOutOfRangeException) {
1197 Assert.Fail ("ReceiveTimeoutChange #9");
1204 [ExpectedException (typeof(ObjectDisposedException))]
1205 public void ReceiveTimeoutClosed ()
1207 Socket sock = new Socket (AddressFamily.InterNetwork,
1213 int val = sock.ReceiveTimeout;
1217 public void NoDelayDefaultTcp ()
1219 Socket sock = new Socket (AddressFamily.InterNetwork,
1223 Assert.AreEqual (false, sock.NoDelay, "NoDelayDefaultTcp");
1229 public void NoDelayChangeTcp ()
1231 Socket sock = new Socket (AddressFamily.InterNetwork,
1235 sock.NoDelay = true;
1237 Assert.AreEqual (true, sock.NoDelay, "NoDelayChangeTcp");
1243 public void NoDelayDefaultUdp ()
1245 Socket sock = new Socket (AddressFamily.InterNetwork,
1250 bool val = sock.NoDelay;
1251 Assert.Fail ("NoDelayDefaultUdp #1");
1252 } catch (SocketException ex) {
1253 Assert.AreEqual (10042, ex.ErrorCode,
1254 "NoDelayDefaultUdp #2");
1256 Assert.Fail ("NoDelayDefaultUdp #3");
1263 public void NoDelayChangeUdp ()
1265 Socket sock = new Socket (AddressFamily.InterNetwork,
1270 sock.NoDelay = true;
1271 Assert.Fail ("NoDelayChangeUdp #1");
1272 } catch (SocketException ex) {
1273 Assert.AreEqual (10042, ex.ErrorCode,
1274 "NoDelayChangeUdp #2");
1276 Assert.Fail ("NoDelayChangeUdp #3");
1283 [ExpectedException (typeof(ObjectDisposedException))]
1284 public void NoDelayClosed ()
1286 Socket sock = new Socket (AddressFamily.InterNetwork,
1292 bool val = sock.NoDelay;
1295 static bool BAAccepted = false;
1296 static Socket BASocket = null;
1297 static ManualResetEvent BACalledBack = new ManualResetEvent (false);
1299 private static void BACallback (IAsyncResult asyncResult)
1301 Socket sock = (Socket)asyncResult.AsyncState;
1303 BASocket = sock.EndAccept (asyncResult);
1306 BACalledBack.Set ();
1310 [ExpectedException (typeof(InvalidOperationException))]
1311 public void BeginAcceptNotBound ()
1313 Socket sock = new Socket (AddressFamily.InterNetwork,
1317 sock.BeginAccept (BACallback, sock);
1323 [ExpectedException (typeof(InvalidOperationException))]
1324 public void BeginAcceptNotListening ()
1326 Socket sock = new Socket (AddressFamily.InterNetwork,
1330 sock.Bind (new IPEndPoint (IPAddress.Any, 1236));
1332 sock.BeginAccept (BACallback, sock);
1338 public void BeginAccept ()
1340 Socket sock = new Socket (AddressFamily.InterNetwork,
1343 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
1349 BACalledBack.Reset ();
1351 sock.BeginAccept (BACallback, sock);
1353 Socket conn = new Socket (AddressFamily.InterNetwork,
1359 if (BACalledBack.WaitOne (2000, false) == false) {
1360 Assert.Fail ("BeginAccept wait timed out");
1363 Assert.AreEqual (true, BAAccepted, "BeginAccept #1");
1364 Assert.AreEqual (true, BASocket.Connected, "BeginAccept #2");
1365 Assert.AreEqual (false, sock.Connected, "BeginAccept #3");
1366 Assert.AreEqual (true, conn.Connected, "BeginAccept #4");
1374 [ExpectedException (typeof(ObjectDisposedException))]
1375 public void BeginAcceptClosed ()
1377 Socket sock = new Socket (AddressFamily.InterNetwork,
1383 sock.BeginAccept (BACallback, sock);
1386 static bool BADAccepted = false;
1387 static Socket BADSocket = null;
1388 static byte[] BADBytes;
1389 static int BADByteCount;
1390 static ManualResetEvent BADCalledBack = new ManualResetEvent (false);
1392 private static void BADCallback (IAsyncResult asyncResult)
1394 Socket sock = (Socket)asyncResult.AsyncState;
1396 BADSocket = sock.EndAccept (out BADBytes,
1401 BADCalledBack.Set ();
1405 public void BeginAcceptData ()
1407 Socket sock = new Socket (AddressFamily.InterNetwork,
1410 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
1416 BADCalledBack.Reset ();
1418 sock.BeginAccept (256, BADCallback, sock);
1420 Socket conn = new Socket (AddressFamily.InterNetwork,
1423 byte[] send_bytes = new byte[] {10, 11, 12, 13};
1426 conn.Send (send_bytes);
1428 if (BADCalledBack.WaitOne (2000, false) == false) {
1429 Assert.Fail ("BeginAcceptData wait timed out");
1432 Assert.AreEqual (true, BADAccepted, "BeginAcceptData #1");
1433 Assert.AreEqual (true, BADSocket.Connected, "BeginAcceptData #2");
1434 Assert.AreEqual (false, sock.Connected, "BeginAcceptData #3");
1435 Assert.AreEqual (true, conn.Connected, "BeginAcceptData #4");
1436 Assert.AreEqual (send_bytes.Length, BADByteCount, "BeginAcceptData #5");
1438 /* The MS runtime gives the returned data in a
1439 * much bigger array. TODO: investigate
1440 * whether it the size correlates to the first
1441 * parameter in BeginAccept()
1443 Assert.IsFalse (BADBytes.Length == send_bytes.Length,
1444 "BeginAcceptData #6");
1446 for(int i = 0; i < send_bytes.Length; i++) {
1447 Assert.AreEqual (send_bytes[i], BADBytes[i], "BeginAcceptData #" + (i+7).ToString ());
1456 [ExpectedException (typeof(ObjectDisposedException))]
1457 public void BeginAcceptDataClosed ()
1459 Socket sock = new Socket (AddressFamily.InterNetwork,
1465 sock.BeginAccept (256, BADCallback, sock);
1469 public void BeginAcceptSocketUdp ()
1471 Socket sock = new Socket (AddressFamily.InterNetwork,
1474 Socket acc = new Socket (AddressFamily.InterNetwork,
1478 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
1485 sock.BeginAccept (acc, 256, BADCallback, sock);
1486 Assert.Fail ("BeginAcceptSocketUdp #1");
1487 } catch (SocketException ex) {
1488 Assert.AreEqual (10022, ex.ErrorCode, "BeginAcceptSocketUdp #2");
1490 Assert.Fail ("BeginAcceptSocketUdp #3");
1498 public void BeginAcceptSocketBound ()
1500 Socket sock = new Socket (AddressFamily.InterNetwork,
1503 Socket acc = new Socket (AddressFamily.InterNetwork,
1507 IPEndPoint ep1 = new IPEndPoint (IPAddress.Loopback,
1510 IPEndPoint ep2 = new IPEndPoint (IPAddress.Loopback,
1519 sock.BeginAccept (acc, 256, BADCallback, sock);
1520 Assert.Fail ("BeginAcceptSocketBound #1");
1521 } catch (InvalidOperationException) {
1523 Assert.Fail ("BeginAcceptSocketBound #2");
1531 public void BeginAcceptSocket ()
1533 Socket sock = new Socket (AddressFamily.InterNetwork,
1536 Socket acc = new Socket (AddressFamily.InterNetwork,
1540 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
1546 BADCalledBack.Reset ();
1548 sock.BeginAccept (acc, 256, BADCallback, sock);
1550 Socket conn = new Socket (AddressFamily.InterNetwork,
1553 byte[] send_bytes = new byte[] {10, 11, 12, 13};
1556 conn.Send (send_bytes);
1558 if (BADCalledBack.WaitOne (2000, false) == false) {
1559 Assert.Fail ("BeginAcceptSocket wait timed out");
1562 Assert.AreEqual (true, BADAccepted, "BeginAcceptSocket #1");
1563 Assert.AreEqual (true, BADSocket.Connected, "BeginAcceptSocket #2");
1564 Assert.AreEqual (false, sock.Connected, "BeginAcceptSocket #3");
1565 Assert.AreEqual (true, conn.Connected, "BeginAcceptSocket #4");
1566 Assert.AreEqual (send_bytes.Length, BADByteCount, "BeginAcceptSocket #5");
1567 Assert.AreEqual (AddressFamily.InterNetwork, acc.AddressFamily, "BeginAcceptSocket #6");
1568 Assert.AreEqual (SocketType.Stream, acc.SocketType, "BeginAcceptSocket #7");
1569 Assert.AreEqual (ProtocolType.Tcp, acc.ProtocolType, "BeginAcceptSocket #8");
1570 Assert.AreEqual (conn.LocalEndPoint, acc.RemoteEndPoint, "BeginAcceptSocket #9");
1572 /* The MS runtime gives the returned data in a
1573 * much bigger array. TODO: investigate
1574 * whether it the size correlates to the first
1575 * parameter in BeginAccept()
1577 Assert.IsFalse (BADBytes.Length == send_bytes.Length,
1578 "BeginAcceptSocket #10");
1580 for(int i = 0; i < send_bytes.Length; i++) {
1581 Assert.AreEqual (send_bytes[i], BADBytes[i], "BeginAcceptSocket #" + (i+11).ToString ());
1591 public void BeginAcceptSocketClosed ()
1593 Socket sock = new Socket (AddressFamily.InterNetwork,
1596 Socket acc = new Socket (AddressFamily.InterNetwork,
1603 sock.BeginAccept (acc, 256, BADCallback, null);
1604 Assert.Fail ("BeginAcceptSocketClosed #1");
1605 } catch (ObjectDisposedException) {
1607 Assert.Fail ("BeginAcceptSocketClosed #2");
1614 public void BeginAcceptSocketAccClosed ()
1616 Socket sock = new Socket (AddressFamily.InterNetwork,
1619 Socket acc = new Socket (AddressFamily.InterNetwork,
1622 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
1630 BADCalledBack.Reset ();
1633 sock.BeginAccept (acc, 256, BADCallback, null);
1634 Assert.Fail ("BeginAcceptSocketAccClosed #1");
1635 } catch (ObjectDisposedException) {
1637 Assert.Fail ("BeginAcceptSocketAccClosed #2");
1643 static bool BCConnected = false;
1644 static ManualResetEvent BCCalledBack = new ManualResetEvent (false);
1646 private static void BCCallback (IAsyncResult asyncResult)
1648 Socket sock = (Socket)asyncResult.AsyncState;
1650 sock.EndConnect (asyncResult);
1653 BCCalledBack.Set ();
1657 public void BeginConnectAddressPort ()
1659 Socket sock = new Socket (AddressFamily.InterNetwork,
1662 Socket listen = new Socket (AddressFamily.InterNetwork,
1665 IPAddress ip = IPAddress.Loopback;
1666 IPEndPoint ep = new IPEndPoint (ip, 1244);
1671 BCCalledBack.Reset ();
1673 BCConnected = false;
1675 sock.BeginConnect (ip, 1244, BCCallback, sock);
1677 if (BCCalledBack.WaitOne (2000, false) == false) {
1678 Assert.Fail ("BeginConnectAddressPort wait timed out");
1681 Assert.AreEqual (true, BCConnected, "BeginConnectAddressPort #1");
1688 public void BeginConnectAddressPortNull ()
1690 Socket sock = new Socket (AddressFamily.InterNetwork,
1693 IPAddress ip = null;
1696 sock.BeginConnect (ip, 1244, BCCallback,
1698 Assert.Fail ("BeginConnectAddressPortNull #1");
1699 } catch (ArgumentNullException) {
1701 Assert.Fail ("BeginConnectAddressPortNull #2");
1708 public void BeginConnectAddressPortListen ()
1710 Socket sock = new Socket (AddressFamily.InterNetwork,
1713 IPAddress ip = IPAddress.Loopback;
1714 IPEndPoint ep = new IPEndPoint (ip, 1245);
1720 sock.BeginConnect (ip, 1245, BCCallback, sock);
1721 Assert.Fail ("BeginConnectAddressPortListen #1");
1722 } catch (InvalidOperationException) {
1724 Assert.Fail ("BeginConnectAddressPortListen #2");
1731 [ExpectedException (typeof(ObjectDisposedException))]
1732 public void BeginConnectAddressPortClosed ()
1734 Socket sock = new Socket (AddressFamily.InterNetwork,
1737 IPAddress ip = IPAddress.Loopback;
1741 sock.BeginConnect (ip, 1244, BCCallback, sock);
1745 [Category ("NotOnMac")]
1747 * This is not a Mono bug.
1749 * By default, only 127.0.0.1 is enabled and you must explicitly
1750 * enable additional addresses using 'sudo ifconfig lo0 alias 127.0.0.1'.
1752 * I tested this on Mac OS 10.7.4; a 'ping 127.0.0.2' does not work
1753 * until I add that alias.
1756 public void BeginConnectMultiple ()
1758 Socket sock = new Socket (AddressFamily.InterNetwork,
1761 Socket listen = new Socket (AddressFamily.InterNetwork,
1764 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
1766 IPAddress[] ips = new IPAddress[4];
1768 ips[0] = IPAddress.Parse ("127.0.0.4");
1769 ips[1] = IPAddress.Parse ("127.0.0.3");
1770 ips[2] = IPAddress.Parse ("127.0.0.2");
1771 ips[3] = IPAddress.Parse ("127.0.0.1");
1776 BCCalledBack.Reset ();
1778 BCConnected = false;
1780 sock.BeginConnect (ips, 1246, BCCallback, sock);
1782 /* Longer wait here, because the ms runtime
1783 * takes a lot longer to not connect
1785 if (BCCalledBack.WaitOne (10000, false) == false) {
1786 Assert.Fail ("BeginConnectMultiple wait failed");
1789 Assert.AreEqual (true, BCConnected, "BeginConnectMultiple #1");
1790 Assert.AreEqual (AddressFamily.InterNetwork, sock.RemoteEndPoint.AddressFamily, "BeginConnectMultiple #2");
1791 IPEndPoint remep = (IPEndPoint)sock.RemoteEndPoint;
1793 Assert.AreEqual (IPAddress.Loopback, remep.Address, "BeginConnectMultiple #2");
1800 public void BeginConnectMultiple2 ()
1802 Socket sock = new Socket (AddressFamily.InterNetwork,
1805 Socket listen = new Socket (AddressFamily.InterNetwork,
1809 // Need at least two addresses.
1810 var ips = Dns.GetHostAddresses (string.Empty);
1814 var allIps = new IPAddress [ips.Length + 1];
1815 allIps [0] = IPAddress.Loopback;
1816 ips.CopyTo (allIps, 1);
1819 * Only bind to the loopback interface, so all the non-loopback
1820 * IP addresses will fail. BeginConnect()/EndConnect() should
1821 * succeed it it can connect to at least one of the requested
1824 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 1246);
1829 BCCalledBack.Reset ();
1831 BCConnected = false;
1833 sock.BeginConnect (allIps, 1246, BCCallback, sock);
1835 /* Longer wait here, because the ms runtime
1836 * takes a lot longer to not connect
1838 if (BCCalledBack.WaitOne (10000, false) == false) {
1839 Assert.Fail ("BeginConnectMultiple2 wait failed");
1842 Assert.AreEqual (true, BCConnected, "BeginConnectMultiple2 #1");
1843 Assert.AreEqual (AddressFamily.InterNetwork, sock.RemoteEndPoint.AddressFamily, "BeginConnectMultiple2 #2");
1844 IPEndPoint remep = (IPEndPoint)sock.RemoteEndPoint;
1846 Assert.AreEqual (IPAddress.Loopback, remep.Address, "BeginConnectMultiple2 #2");
1854 public void BeginConnectMultipleNull ()
1856 Socket sock = new Socket (AddressFamily.InterNetwork,
1859 IPAddress[] ips = null;
1862 sock.BeginConnect (ips, 1246, BCCallback,
1864 Assert.Fail ("BeginConnectMultipleNull #1");
1865 } catch (ArgumentNullException) {
1867 Assert.Fail ("BeginConnectMultipleNull #2");
1874 public void BeginConnectMultipleListen ()
1876 Socket sock = new Socket (AddressFamily.InterNetwork,
1879 IPAddress[] ips = new IPAddress[4];
1880 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
1883 ips[0] = IPAddress.Parse ("127.0.0.4");
1884 ips[1] = IPAddress.Parse ("127.0.0.3");
1885 ips[2] = IPAddress.Parse ("127.0.0.2");
1886 ips[3] = IPAddress.Parse ("127.0.0.1");
1892 sock.BeginConnect (ips, 1247, BCCallback,
1894 Assert.Fail ("BeginConnectMultipleListen #1");
1895 } catch (InvalidOperationException) {
1897 Assert.Fail ("BeginConnectMultipleListen #2");
1904 [ExpectedException (typeof(ObjectDisposedException))]
1905 public void BeginConnectMultipleClosed ()
1907 Socket sock = new Socket (AddressFamily.InterNetwork,
1910 IPAddress[] ips = new IPAddress[4];
1912 ips[0] = IPAddress.Parse ("127.0.0.4");
1913 ips[1] = IPAddress.Parse ("127.0.0.3");
1914 ips[2] = IPAddress.Parse ("127.0.0.2");
1915 ips[3] = IPAddress.Parse ("127.0.0.1");
1919 sock.BeginConnect (ips, 1247, BCCallback, sock);
1923 public void BeginConnectHostPortNull ()
1925 Socket sock = new Socket (AddressFamily.InterNetwork,
1930 sock.BeginConnect ((string)null, 0,
1932 Assert.Fail ("BeginConnectHostPort #1");
1933 } catch (ArgumentNullException) {
1935 Assert.Fail ("BeginConnectHostPort #2");
1942 public void BeginConnectHostPortListen ()
1944 Socket sock = new Socket (AddressFamily.InterNetwork,
1947 IPAddress ip = IPAddress.Loopback;
1948 IPEndPoint ep = new IPEndPoint (ip, 1248);
1954 sock.BeginConnect ("localhost", 1248,
1956 Assert.Fail ("BeginConnectHostPortListen #1");
1957 } catch (InvalidOperationException) {
1959 Assert.Fail ("BeginConnectHostPortListen #2");
1966 [Category ("NotWorking")] // Need to pick a non-IP AddressFamily that "works" on both mono and ms, this one only works on ms
1967 public void BeginConnectHostPortNotIP ()
1969 Socket sock = new Socket (AddressFamily.NetBios,
1970 SocketType.Seqpacket,
1971 ProtocolType.Unspecified);
1974 sock.BeginConnect ("localhost", 0, BCCallback,
1976 Assert.Fail ("BeginConnectHostPortNotIP #1");
1977 } catch (NotSupportedException) {
1979 Assert.Fail ("BeginConnectHostPortNotIP #2");
1986 [ExpectedException (typeof(ObjectDisposedException))]
1987 public void BeginConnectHostPortClosed ()
1989 Socket sock = new Socket (AddressFamily.InterNetwork,
1995 sock.BeginConnect ("localhost", 0, BCCallback, sock);
1998 static bool BDDisconnected = false;
1999 static ManualResetEvent BDCalledBack = new ManualResetEvent (false);
2001 private static void BDCallback (IAsyncResult asyncResult)
2003 Socket sock = (Socket)asyncResult.AsyncState;
2005 sock.EndDisconnect (asyncResult);
2006 BDDisconnected = true;
2008 BDCalledBack.Set ();
2012 [Category ("NotDotNet")] // "Needs XP or later"
2013 public void BeginDisconnect ()
2015 Socket sock = new Socket (AddressFamily.InterNetwork,
2018 Socket listen = new Socket (AddressFamily.InterNetwork,
2021 IPAddress ip = IPAddress.Loopback;
2022 IPEndPoint ep = new IPEndPoint (ip, 1254);
2027 sock.Connect (ip, 1254);
2029 Assert.AreEqual (true, sock.Connected, "BeginDisconnect #1");
2031 sock.Shutdown (SocketShutdown.Both);
2033 BDCalledBack.Reset ();
2034 BDDisconnected = false;
2036 sock.BeginDisconnect (false, BDCallback, sock);
2038 if (BDCalledBack.WaitOne (2000, false) == false) {
2039 Assert.Fail ("BeginDisconnect wait timed out");
2042 Assert.AreEqual (true, BDDisconnected, "BeginDisconnect #2");
2043 Assert.AreEqual (false, sock.Connected, "BeginDisconnect #3");
2050 public void BeginReceiveSocketError ()
2055 public void BeginReceiveGeneric ()
2060 public void BeginReceiveGenericSocketError ()
2064 private static void BSCallback (IAsyncResult asyncResult)
2066 Socket sock = (Socket)asyncResult.AsyncState;
2068 sock.EndSend (asyncResult);
2072 public void BeginSendNotConnected ()
2074 Socket sock = new Socket (AddressFamily.InterNetwork,
2078 byte[] send_bytes = new byte[] {10, 11, 12, 13};
2081 sock.BeginSend (send_bytes, 0,
2083 SocketFlags.None, BSCallback,
2085 Assert.Fail ("BeginSendNotConnected #1");
2086 } catch (SocketException ex) {
2087 Assert.AreEqual (10057, ex.ErrorCode, "BeginSendNotConnected #2");
2089 Assert.Fail ("BeginSendNotConnected #3");
2096 public void BeginSendSocketError ()
2101 public void BeginSendGeneric ()
2106 public void BeginSendGenericSocketError ()
2111 public void BindTwice ()
2113 Socket sock = new Socket (AddressFamily.InterNetwork,
2116 IPEndPoint ep1 = new IPEndPoint (IPAddress.Loopback,
2118 IPEndPoint ep2 = new IPEndPoint (IPAddress.Loopback,
2125 Assert.Fail ("BindTwice #1");
2126 } catch (SocketException ex) {
2127 Assert.AreEqual (10022, ex.ErrorCode, "BindTwice #2");
2129 Assert.Fail ("BindTwice #3");
2136 public void Close ()
2138 Socket sock = new Socket (AddressFamily.InterNetwork,
2141 Socket listen = new Socket (AddressFamily.InterNetwork,
2144 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
2152 Assert.AreEqual (true, sock.Connected, "Close #1");
2156 Thread.Sleep (3000);
2158 Assert.AreEqual (false, sock.Connected, "Close #2");
2164 public void ConnectAddressPort ()
2166 Socket sock = new Socket (AddressFamily.InterNetwork,
2169 Socket listen = new Socket (AddressFamily.InterNetwork,
2172 IPAddress ip = IPAddress.Loopback;
2173 IPEndPoint ep = new IPEndPoint (ip, 1249);
2178 sock.Connect (ip, 1249);
2180 Assert.AreEqual (true, sock.Connected, "ConnectAddressPort #1");
2187 public void ConnectAddressPortNull ()
2189 Socket sock = new Socket (AddressFamily.InterNetwork,
2192 IPAddress ip = null;
2195 sock.Connect (ip, 1249);
2196 Assert.Fail ("ConnectAddressPortNull #1");
2197 } catch (ArgumentNullException) {
2199 Assert.Fail ("ConnectAddressPortNull #2");
2206 public void ConnectAddressPortListen ()
2208 Socket sock = new Socket (AddressFamily.InterNetwork,
2211 IPAddress ip = IPAddress.Loopback;
2212 IPEndPoint ep = new IPEndPoint (ip, 1250);
2218 sock.Connect (ip, 1250);
2219 Assert.Fail ("ConnectAddressPortListen #1");
2220 } catch (InvalidOperationException) {
2222 Assert.Fail ("ConnectAddressPortListen #2");
2229 [ExpectedException (typeof(ObjectDisposedException))]
2230 public void ConnectAddressPortClosed ()
2232 Socket sock = new Socket (AddressFamily.InterNetwork,
2235 IPAddress ip = IPAddress.Loopback;
2239 sock.Connect (ip, 1250);
2243 [Category ("NotOnMac")] // MacOSX trashes the fd after the failed connect attempt to 127.0.0.4
2245 * This is not a Mono bug.
2247 * By default, only 127.0.0.1 is enabled and you must explicitly
2248 * enable additional addresses using 'sudo ifconfig lo0 alias 127.0.0.1'.
2250 * I tested this on Mac OS 10.7.4; a 'ping 127.0.0.2' does not work
2251 * until I add that alias.
2253 * However, after doing so, Mac OS treats these as separate addresses, ie. attempting
2254 * to connect to 127.0.0.4 yields a connection refused.
2256 * When using Connect(), the .NET runtime also throws an exception if connecting to
2257 * any of the IP addresses fails. This is different with BeginConnect()/EndConnect()
2258 * which succeeds when it can connect to at least one of the addresses.
2261 public void ConnectMultiple ()
2263 Socket sock = new Socket (AddressFamily.InterNetwork,
2266 Socket listen = new Socket (AddressFamily.InterNetwork,
2269 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
2271 IPAddress[] ips = new IPAddress[4];
2273 ips[0] = IPAddress.Parse ("127.0.0.4");
2274 ips[1] = IPAddress.Parse ("127.0.0.3");
2275 ips[2] = IPAddress.Parse ("127.0.0.2");
2276 ips[3] = IPAddress.Parse ("127.0.0.1");
2281 sock.Connect (ips, 1251);
2283 Assert.AreEqual (true, sock.Connected, "ConnectMultiple #1");
2284 Assert.AreEqual (AddressFamily.InterNetwork, sock.RemoteEndPoint.AddressFamily, "ConnectMultiple #2");
2285 IPEndPoint remep = (IPEndPoint)sock.RemoteEndPoint;
2287 Assert.AreEqual (IPAddress.Loopback, remep.Address, "ConnectMultiple #2");
2294 public void ConnectMultiple2 ()
2296 Socket sock = new Socket (AddressFamily.InterNetwork,
2299 Socket listen = new Socket (AddressFamily.InterNetwork,
2303 // Need at least two addresses.
2304 var ips = Dns.GetHostAddresses (string.Empty);
2308 var allIps = new IPAddress [ips.Length + 1];
2309 allIps [0] = IPAddress.Loopback;
2310 ips.CopyTo (allIps, 1);
2313 * Bind to IPAddress.Any; Connect() will fail unless it can
2314 * connect to all the addresses in allIps.
2316 IPEndPoint ep = new IPEndPoint (IPAddress.Any, 1251);
2321 sock.Connect (allIps, 1251);
2323 Assert.AreEqual (true, sock.Connected, "ConnectMultiple2 #1");
2324 Assert.AreEqual (AddressFamily.InterNetwork, sock.RemoteEndPoint.AddressFamily, "ConnectMultiple2 #2");
2325 IPEndPoint remep = (IPEndPoint)sock.RemoteEndPoint;
2327 Assert.AreEqual (IPAddress.Loopback, remep.Address, "ConnectMultiple2 #3");
2334 public void ConnectMultipleNull ()
2336 Socket sock = new Socket (AddressFamily.InterNetwork,
2339 IPAddress[] ips = null;
2342 sock.Connect (ips, 1251);
2343 Assert.Fail ("ConnectMultipleNull #1");
2344 } catch (ArgumentNullException) {
2346 Assert.Fail ("ConnectMultipleNull #2");
2353 public void ConnectMultipleListen ()
2355 Socket sock = new Socket (AddressFamily.InterNetwork,
2358 IPAddress[] ips = new IPAddress[4];
2359 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
2362 ips[0] = IPAddress.Parse ("127.0.0.4");
2363 ips[1] = IPAddress.Parse ("127.0.0.3");
2364 ips[2] = IPAddress.Parse ("127.0.0.2");
2365 ips[3] = IPAddress.Parse ("127.0.0.1");
2371 sock.Connect (ips, 1252);
2372 Assert.Fail ("ConnectMultipleListen #1");
2373 } catch (InvalidOperationException) {
2375 Assert.Fail ("ConnectMultipleListen #2");
2382 [ExpectedException (typeof(ObjectDisposedException))]
2383 public void ConnectMultipleClosed ()
2385 Socket sock = new Socket (AddressFamily.InterNetwork,
2388 IPAddress[] ips = new IPAddress[4];
2390 ips[0] = IPAddress.Parse ("127.0.0.4");
2391 ips[1] = IPAddress.Parse ("127.0.0.3");
2392 ips[2] = IPAddress.Parse ("127.0.0.2");
2393 ips[3] = IPAddress.Parse ("127.0.0.1");
2397 sock.Connect (ips, 1252);
2401 public void ConnectHostPortNull ()
2403 Socket sock = new Socket (AddressFamily.InterNetwork,
2408 sock.Connect ((string)null, 0);
2409 Assert.Fail ("ConnectHostPort #1");
2410 } catch (ArgumentNullException) {
2412 Assert.Fail ("ConnectHostPort #2");
2419 public void ConnectHostPortListen ()
2421 Socket sock = new Socket (AddressFamily.InterNetwork,
2424 IPAddress ip = IPAddress.Loopback;
2425 IPEndPoint ep = new IPEndPoint (ip, 1253);
2431 sock.Connect ("localhost", 1253);
2432 Assert.Fail ("ConnectHostPortListen #1");
2433 } catch (InvalidOperationException) {
2435 Assert.Fail ("ConnectHostPortListen #2");
2442 [Category ("NotWorking")] // Need to pick a non-IP AddressFamily that "works" on both mono and ms, this one only works on ms
2443 public void ConnectHostPortNotIP ()
2445 Socket sock = new Socket (AddressFamily.NetBios,
2446 SocketType.Seqpacket,
2447 ProtocolType.Unspecified);
2450 sock.Connect ("localhost", 0);
2451 Assert.Fail ("ConnectHostPortNotIP #1");
2452 } catch (NotSupportedException) {
2454 Assert.Fail ("ConnectHostPortNotIP #2");
2461 [ExpectedException (typeof(ObjectDisposedException))]
2462 public void ConnectHostPortClosed ()
2464 Socket sock = new Socket (AddressFamily.InterNetwork,
2470 sock.Connect ("localhost", 0);
2474 [Category ("NotDotNet")] // "Needs XP or later"
2475 public void Disconnect ()
2477 Socket sock = new Socket (AddressFamily.InterNetwork,
2480 Socket listen = new Socket (AddressFamily.InterNetwork,
2483 IPAddress ip = IPAddress.Loopback;
2484 IPEndPoint ep = new IPEndPoint (ip, 1255);
2489 sock.Connect (ip, 1255);
2491 Assert.AreEqual (true, sock.Connected, "Disconnect #1");
2493 sock.Shutdown (SocketShutdown.Both);
2495 sock.Disconnect (false);
2497 Assert.AreEqual (false, sock.Connected, "BeginDisconnect #3");
2504 public void DuplicateAndClose ()
2509 public void IOControl ()
2514 public void ReceiveGeneric ()
2518 IPEndPoint endpoint = new IPEndPoint(IPAddress.Loopback, 1258);
2520 Socket listensock = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
2521 listensock.Bind (endpoint);
2522 listensock.Listen(1);
2524 Socket sendsock = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
2525 sendsock.Connect(endpoint);
2527 Socket clientsock = listensock.Accept();
2529 byte[] sendbuf = new byte[256];
2531 for(i = 0; i < 256; i++) {
2532 sendbuf[i] = (byte)i;
2534 for (i = 4; i < 6; i++) {
2535 Assert.AreEqual (sendbuf[i], (byte)i,
2536 "#1/" + i.ToString());
2540 sendsock.Send (sendbuf, 0, 256, SocketFlags.None,
2544 byte[] recvbuf = new byte[256];
2545 List<ArraySegment<byte>> recvbuflist = new List<ArraySegment<byte>>(2);
2546 recvbuflist.Add(new ArraySegment<byte>(recvbuf, 4, 2));
2547 recvbuflist.Add(new ArraySegment<byte>(recvbuf, 20, 230));
2549 clientsock.Receive (recvbuflist);
2551 /* recvbuf should now hold the first 2 bytes
2552 * of sendbuf from pos 4, and the next 230
2553 * bytes of sendbuf from pos 20
2556 for (i = 0; i < 2; i++) {
2557 Assert.AreEqual (sendbuf[i], recvbuf[i + 4],
2558 "#2/" + i.ToString());
2560 for (i = 2; i < 232; i++) {
2561 Assert.AreEqual (sendbuf[i], recvbuf[i + 18],
2562 "#2/" + i.ToString());
2566 clientsock.Close ();
2567 listensock.Close ();
2571 public void SendGeneric ()
2575 IPEndPoint endpoint = new IPEndPoint(IPAddress.Loopback, 1259);
2577 Socket listensock = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
2578 listensock.Bind (endpoint);
2579 listensock.Listen(1);
2581 Socket sendsock = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
2582 sendsock.Connect(endpoint);
2584 Socket clientsock = listensock.Accept();
2586 byte[] sendbuf = new byte[256];
2587 List<ArraySegment<byte>> sendbuflist = new List<ArraySegment<byte>>(2);
2589 sendbuflist.Add(new ArraySegment<byte>(sendbuf, 4, 2));
2590 sendbuflist.Add(new ArraySegment<byte>(sendbuf, 20, 230));
2592 for(i = 0; i < 256; i++) {
2593 sendbuf[i] = (byte)i;
2595 for (i = 4; i < 6; i++) {
2596 Assert.AreEqual (sendbuf[i], (byte)i,
2597 "#1/" + i.ToString());
2601 sendsock.Send (sendbuflist, SocketFlags.None, out err);
2604 byte[] recvbuf = new byte[256];
2606 clientsock.Receive (recvbuf);
2608 /* The first 2 bytes of recvbuf should now
2609 * hold 2 bytes of sendbuf from pos 4, and the
2610 * next 230 bytes of recvbuf should be sendbuf
2614 for (i = 0; i < 2; i++) {
2615 Assert.AreEqual (recvbuf[i], sendbuf[i + 4],
2616 "#2/" + i.ToString());
2618 for (i = 2; i < 232; i++) {
2619 Assert.AreEqual (recvbuf[i], sendbuf[i + 18],
2620 "#2/" + i.ToString());
2624 clientsock.Close ();
2625 listensock.Close ();
2629 public void ListenNotBound ()
2631 Socket sock = new Socket (AddressFamily.InterNetwork,
2637 Assert.Fail ("ListenNotBound #1");
2638 } catch (SocketException ex) {
2639 Assert.AreEqual (10022, ex.ErrorCode, "ListenNotBound #2");
2641 Assert.Fail ("ListenNotBound #3");
2648 static Socket CWRSocket;
2649 static bool CWRReceiving = true;
2650 static ManualResetEvent CWRReady = new ManualResetEvent (false);
2652 private static void CWRReceiveThread ()
2654 byte[] buf = new byte[256];
2657 CWRSocket.Receive (buf);
2658 } catch (SocketException) {
2659 CWRReceiving = false;
2666 public void CloseWhileReceiving ()
2668 CWRSocket = new Socket (AddressFamily.InterNetwork,
2671 CWRSocket.Bind (new IPEndPoint (IPAddress.Loopback,
2674 Thread recv_thread = new Thread (new ThreadStart (CWRReceiveThread));
2676 recv_thread.Start ();
2677 Thread.Sleep (250); /* Wait for the thread to be already receiving */
2680 if (CWRReady.WaitOne (1000, false) == false) {
2681 Assert.Fail ("CloseWhileReceiving wait timed out");
2684 Assert.IsFalse (CWRReceiving);
2687 static bool RRCLastRead = false;
2688 static ManualResetEvent RRCReady = new ManualResetEvent (false);
2690 private static void RRCClientThread ()
2692 byte[] bytes = new byte[8];
2695 Socket sock = new Socket (AddressFamily.InterNetwork,
2698 sock.Connect (new IPEndPoint (IPAddress.Loopback,
2701 NetworkStream stream = new NetworkStream (sock);
2703 readbyte = stream.ReadByte ();
2704 Assert.AreEqual (0, readbyte, "ReceiveRemoteClosed #1");
2706 stream.Read (bytes, 0, 0);
2708 readbyte = stream.ReadByte ();
2709 Assert.AreEqual (0, readbyte, "ReceiveRemoteClosed #2");
2711 stream.Read (bytes, 0, 0);
2713 readbyte = stream.ReadByte ();
2714 Assert.AreEqual (-1, readbyte, "ReceiveRemoteClosed #3");
2722 [Test] // Receive (Byte [])
2723 public void Receive1_Buffer_Null ()
2725 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
2729 s.Receive ((byte []) null);
2731 } catch (ArgumentNullException ex) {
2732 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
2733 Assert.IsNull (ex.InnerException, "#3");
2734 Assert.IsNotNull (ex.Message, "#4");
2735 Assert.AreEqual ("buffer", ex.ParamName, "#5");
2741 [Test] // Receive (Byte [])
2742 public void Receive1_Socket_Closed ()
2744 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
2749 s.Receive ((byte []) null);
2751 } catch (ObjectDisposedException ex) {
2752 // Cannot access a disposed object
2753 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
2754 Assert.IsNull (ex.InnerException, "#3");
2755 Assert.IsNotNull (ex.Message, "#4");
2756 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
2760 [Test] // Receive (Byte [], SocketFlags)
2761 public void Receive2_Buffer_Null ()
2763 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
2767 s.Receive ((byte []) null, (SocketFlags) 666);
2769 } catch (ArgumentNullException ex) {
2770 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
2771 Assert.IsNull (ex.InnerException, "#3");
2772 Assert.IsNotNull (ex.Message, "#4");
2773 Assert.AreEqual ("buffer", ex.ParamName, "#5");
2779 [Test] // Receive (Byte [], SocketFlags)
2780 public void Receive2_Socket_Closed ()
2782 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
2787 s.Receive ((byte []) null, (SocketFlags) 666);
2789 } catch (ObjectDisposedException ex) {
2790 // Cannot access a disposed object
2791 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
2792 Assert.IsNull (ex.InnerException, "#3");
2793 Assert.IsNotNull (ex.Message, "#4");
2794 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
2798 [Test] // Receive (Byte [], Int32, SocketFlags)
2799 public void Receive3_Buffer_Null ()
2801 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
2805 s.Receive ((byte []) null, 0, (SocketFlags) 666);
2807 } catch (ArgumentNullException ex) {
2808 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
2809 Assert.IsNull (ex.InnerException, "#3");
2810 Assert.IsNotNull (ex.Message, "#4");
2811 Assert.AreEqual ("buffer", ex.ParamName, "#5");
2817 [Test] // Receive (Byte [], Int32, SocketFlags)
2818 public void Receive3_Socket_Closed ()
2820 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
2825 s.Receive ((byte []) null, 0, (SocketFlags) 666);
2827 } catch (ObjectDisposedException ex) {
2828 // Cannot access a disposed object
2829 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
2830 Assert.IsNull (ex.InnerException, "#3");
2831 Assert.IsNotNull (ex.Message, "#4");
2832 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
2836 [Test] // Receive (Byte [], Int32, Int32, SocketFlags)
2837 public void Receive4_Buffer_Null ()
2839 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
2843 s.Receive ((byte []) null, 0, 0, (SocketFlags) 666);
2845 } catch (ArgumentNullException ex) {
2846 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
2847 Assert.IsNull (ex.InnerException, "#3");
2848 Assert.IsNotNull (ex.Message, "#4");
2849 Assert.AreEqual ("buffer", ex.ParamName, "#5");
2855 [Test] // Receive (Byte [], Int32, Int32, SocketFlags)
2856 public void Receive4_Socket_Closed ()
2858 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
2863 s.Receive ((byte []) null, 0, 0, (SocketFlags) 666);
2865 } catch (ObjectDisposedException ex) {
2866 // Cannot access a disposed object
2867 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
2868 Assert.IsNull (ex.InnerException, "#3");
2869 Assert.IsNotNull (ex.Message, "#4");
2870 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
2875 [Test] // Receive (Byte [], Int32, Int32, SocketFlags, out SocketError)
2876 public void Receive5_Buffer_Null ()
2878 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
2883 s.Receive ((byte []) null, 0, 0, SocketFlags.None, out error);
2885 } catch (ArgumentNullException ex) {
2886 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
2887 Assert.IsNull (ex.InnerException, "#3");
2888 Assert.IsNotNull (ex.Message, "#4");
2889 Assert.AreEqual ("buffer", ex.ParamName, "#5");
2895 [Test] // Receive (Byte [], Int32, Int32, SocketFlags, out SocketError)
2896 public void Receive5_Socket_Closed ()
2898 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
2904 s.Receive ((byte []) null, 0, 0, SocketFlags.None, out error);
2906 } catch (ObjectDisposedException ex) {
2907 // Cannot access a disposed object
2908 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
2909 Assert.IsNull (ex.InnerException, "#3");
2910 Assert.IsNotNull (ex.Message, "#4");
2911 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
2915 [Test] // Receive (IList<ArraySegment<Byte>>)
2916 public void Receive6_Buffers_Null ()
2918 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
2922 s.Receive ((IList<ArraySegment<byte>>) null);
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 ("buffers", ex.ParamName, "#5");
2934 [Test] // Receive (IList<ArraySegment<Byte>>)
2935 public void Receive6_Socket_Closed ()
2937 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
2942 s.Receive ((IList<ArraySegment<byte>>) null);
2944 } catch (ObjectDisposedException ex) {
2945 // Cannot access a disposed object
2946 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
2947 Assert.IsNull (ex.InnerException, "#3");
2948 Assert.IsNotNull (ex.Message, "#4");
2949 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
2953 [Test] // Receive (IList<ArraySegment<Byte>>, SocketFlags)
2954 public void Receive7_Buffers_Null ()
2956 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
2960 s.Receive ((IList<ArraySegment<byte>>) null, (SocketFlags) 666);
2962 } catch (ArgumentNullException ex) {
2963 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
2964 Assert.IsNull (ex.InnerException, "#3");
2965 Assert.IsNotNull (ex.Message, "#4");
2966 Assert.AreEqual ("buffers", ex.ParamName, "#5");
2972 [Test] // Receive (IList<ArraySegment<Byte>>, SocketFlags)
2973 public void Receive7_Socket_Closed ()
2975 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
2980 s.Receive ((IList<ArraySegment<byte>>) null, (SocketFlags) 666);
2982 } catch (ObjectDisposedException ex) {
2983 // Cannot access a disposed object
2984 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
2985 Assert.IsNull (ex.InnerException, "#3");
2986 Assert.IsNotNull (ex.Message, "#4");
2987 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
2991 [Test] // Receive (IList<ArraySegment<Byte>>, SocketFlags, out SocketError)
2992 public void Receive8_Buffers_Null ()
2994 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
2999 s.Receive ((IList<ArraySegment<byte>>) null, (SocketFlags) 666,
3002 } catch (ArgumentNullException ex) {
3003 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
3004 Assert.IsNull (ex.InnerException, "#3");
3005 Assert.IsNotNull (ex.Message, "#4");
3006 Assert.AreEqual ("buffers", ex.ParamName, "#5");
3012 [Test] // Receive (IList<ArraySegment<Byte>>, SocketFlags, out SocketError)
3013 public void Receive8_Socket_Closed ()
3015 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3021 s.Receive ((IList<ArraySegment<byte>>) null, (SocketFlags) 666,
3024 } catch (ObjectDisposedException ex) {
3025 // Cannot access a disposed object
3026 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
3027 Assert.IsNull (ex.InnerException, "#3");
3028 Assert.IsNotNull (ex.Message, "#4");
3029 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
3036 [Test] // ReceiveFrom (Byte [], ref EndPoint)
3037 public void ReceiveFrom1_Buffer_Null ()
3039 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3042 EndPoint remoteEP = new IPEndPoint (IPAddress.Loopback, 8001);
3044 s.ReceiveFrom ((Byte []) null, ref remoteEP);
3046 } catch (ArgumentNullException ex) {
3047 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
3048 Assert.IsNull (ex.InnerException, "#3");
3049 Assert.IsNotNull (ex.Message, "#4");
3050 Assert.AreEqual ("buffer", ex.ParamName, "#5");
3056 [Test] // ReceiveFrom (Byte [], ref EndPoint)
3057 public void ReceiveFrom1_RemoteEP_Null ()
3059 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3062 byte [] buffer = new byte [0];
3063 EndPoint remoteEP = null;
3065 s.ReceiveFrom (buffer, ref remoteEP);
3067 } catch (ArgumentNullException ex) {
3068 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
3069 Assert.IsNull (ex.InnerException, "#3");
3070 Assert.IsNotNull (ex.Message, "#4");
3071 Assert.AreEqual ("remoteEP", ex.ParamName, "#5");
3077 [Test] // ReceiveFrom (Byte [], ref EndPoint)
3078 public void ReceiveFrom1_Socket_Closed ()
3080 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3084 EndPoint remoteEP = new IPEndPoint (IPAddress.Loopback, 8001);
3086 s.ReceiveFrom ((Byte []) null, ref remoteEP);
3088 } catch (ObjectDisposedException ex) {
3089 // Cannot access a disposed object
3090 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
3091 Assert.IsNull (ex.InnerException, "#3");
3092 Assert.IsNotNull (ex.Message, "#4");
3093 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
3097 [Test] // ReceiveFrom (Byte [], SocketFlags, ref EndPoint)
3098 public void ReceiveFrom2_Buffer_Null ()
3100 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3103 EndPoint remoteEP = new IPEndPoint (IPAddress.Loopback, 8001);
3105 s.ReceiveFrom ((Byte []) null, (SocketFlags) 666, ref remoteEP);
3107 } catch (ArgumentNullException ex) {
3108 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
3109 Assert.IsNull (ex.InnerException, "#3");
3110 Assert.IsNotNull (ex.Message, "#4");
3111 Assert.AreEqual ("buffer", ex.ParamName, "#5");
3117 [Test] // ReceiveFrom (Byte [], SocketFlags, ref EndPoint)
3118 public void ReceiveFrom2_RemoteEP_Null ()
3120 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3123 byte [] buffer = new byte [5];
3124 EndPoint remoteEP = null;
3126 s.ReceiveFrom (buffer, (SocketFlags) 666, ref remoteEP);
3128 } catch (ArgumentNullException ex) {
3129 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
3130 Assert.IsNull (ex.InnerException, "#3");
3131 Assert.IsNotNull (ex.Message, "#4");
3132 Assert.AreEqual ("remoteEP", ex.ParamName, "#5");
3138 [Test] // ReceiveFrom (Byte [], SocketFlags, ref EndPoint)
3139 public void ReceiveFrom2_Socket_Closed ()
3141 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3145 EndPoint remoteEP = new IPEndPoint (IPAddress.Loopback, 8001);
3147 s.ReceiveFrom ((Byte []) null, (SocketFlags) 666, ref remoteEP);
3149 } catch (ObjectDisposedException ex) {
3150 // Cannot access a disposed object
3151 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
3152 Assert.IsNull (ex.InnerException, "#3");
3153 Assert.IsNotNull (ex.Message, "#4");
3154 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
3158 [Test] // ReceiveFrom (Byte [], Int32, SocketFlags, ref EndPoint)
3159 public void ReceiveFrom3_Buffer_Null ()
3161 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3164 EndPoint remoteEP = new IPEndPoint (IPAddress.Loopback, 8001);
3166 s.ReceiveFrom ((Byte []) null, -1, (SocketFlags) 666,
3169 } catch (ArgumentNullException ex) {
3170 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
3171 Assert.IsNull (ex.InnerException, "#3");
3172 Assert.IsNotNull (ex.Message, "#4");
3173 Assert.AreEqual ("buffer", ex.ParamName, "#5");
3179 [Test] // ReceiveFrom (Byte [], Int32, SocketFlags, ref EndPoint)
3180 public void ReceiveFrom3_RemoteEP_Null ()
3182 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3185 byte [] buffer = new byte [5];
3186 EndPoint remoteEP = null;
3188 s.ReceiveFrom (buffer, -1, (SocketFlags) 666, ref remoteEP);
3190 } catch (ArgumentNullException ex) {
3191 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
3192 Assert.IsNull (ex.InnerException, "#3");
3193 Assert.IsNotNull (ex.Message, "#4");
3194 Assert.AreEqual ("remoteEP", ex.ParamName, "#5");
3200 [Test] // ReceiveFrom (Byte [], Int32, SocketFlags, ref EndPoint)
3201 public void ReceiveFrom3_Size_OutOfRange ()
3204 byte [] buffer = new byte [5];
3205 EndPoint remoteEP = new IPEndPoint (IPAddress.Loopback, 8001);
3208 s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3211 s.ReceiveFrom (buffer, -1, (SocketFlags) 666, ref remoteEP);
3212 Assert.Fail ("#A1");
3213 } catch (ArgumentOutOfRangeException ex) {
3214 // Specified argument was out of the range of valid values
3215 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#A2");
3216 Assert.IsNull (ex.InnerException, "#A3");
3217 Assert.IsNotNull (ex.Message, "#A4");
3218 Assert.AreEqual ("size", ex.ParamName, "#A5");
3223 // size > buffer length
3224 s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3227 s.ReceiveFrom (buffer, (buffer.Length + 1), (SocketFlags) 666,
3229 Assert.Fail ("#B1");
3230 } catch (ArgumentOutOfRangeException ex) {
3231 // Specified argument was out of the range of valid values
3232 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#B2");
3233 Assert.IsNull (ex.InnerException, "#B3");
3234 Assert.IsNotNull (ex.Message, "#B4");
3235 Assert.AreEqual ("size", ex.ParamName, "#B5");
3241 [Test] // ReceiveFrom (Byte [], Int32, SocketFlags, ref EndPoint)
3242 public void ReceiveFrom3_Socket_Closed ()
3244 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3248 EndPoint remoteEP = new IPEndPoint (IPAddress.Loopback, 8001);
3250 s.ReceiveFrom ((Byte []) null, -1, (SocketFlags) 666,
3253 } catch (ObjectDisposedException ex) {
3254 // Cannot access a disposed object
3255 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
3256 Assert.IsNull (ex.InnerException, "#3");
3257 Assert.IsNotNull (ex.Message, "#4");
3258 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
3262 [Test] // ReceiveFrom (Byte [], Int32, Int32, SocketFlags, EndPoint)
3263 public void ReceiveFrom4_Buffer_Null ()
3265 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3267 EndPoint remoteEP = new IPEndPoint (IPAddress.Loopback, 8001);
3270 s.ReceiveFrom ((Byte []) null, -1, -1, (SocketFlags) 666,
3273 } catch (ArgumentNullException ex) {
3274 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
3275 Assert.IsNull (ex.InnerException, "#3");
3276 Assert.IsNotNull (ex.Message, "#4");
3277 Assert.AreEqual ("buffer", ex.ParamName, "#5");
3281 [Test] // ReceiveFrom (Byte [], Int32, Int32, SocketFlags, EndPoint)
3282 public void ReceiveFrom4_Offset_OutOfRange ()
3285 byte [] buffer = new byte [5];
3286 EndPoint remoteEP = new IPEndPoint (IPAddress.Loopback, 8001);
3289 s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3292 s.ReceiveFrom (buffer, -1, 0, (SocketFlags) 666,
3294 Assert.Fail ("#A1");
3295 } catch (ArgumentOutOfRangeException ex) {
3296 // Specified argument was out of the range of valid values
3297 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#A2");
3298 Assert.IsNull (ex.InnerException, "#A3");
3299 Assert.IsNotNull (ex.Message, "#A4");
3300 Assert.AreEqual ("offset", ex.ParamName, "#A5");
3305 // offset > buffer length
3306 s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3309 s.ReceiveFrom (buffer, (buffer.Length + 1), 0, (SocketFlags) 666,
3311 Assert.Fail ("#B1");
3312 } catch (ArgumentOutOfRangeException ex) {
3313 // Specified argument was out of the range of valid values
3314 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#B2");
3315 Assert.IsNull (ex.InnerException, "#B3");
3316 Assert.IsNotNull (ex.Message, "#B4");
3317 Assert.AreEqual ("offset", ex.ParamName, "#B5");
3323 [Test] // ReceiveFrom (Byte [], Int32, Int32, SocketFlags, ref IPEndPoint)
3324 public void ReceiveFrom4_RemoteEP_Null ()
3326 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3328 byte [] buffer = new byte [5];
3329 EndPoint remoteEP = null;
3332 s.ReceiveFrom (buffer, -1, -1, (SocketFlags) 666, ref remoteEP);
3334 } catch (ArgumentNullException ex) {
3335 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
3336 Assert.IsNull (ex.InnerException, "#3");
3337 Assert.IsNotNull (ex.Message, "#4");
3338 Assert.AreEqual ("remoteEP", ex.ParamName, "#5");
3344 [Test] // ReceiveFrom (Byte [], Int32, Int32, SocketFlags, EndPoint)
3345 public void ReceiveFrom4_Size_OutOfRange ()
3348 byte [] buffer = new byte [5];
3349 EndPoint remoteEP = new IPEndPoint (IPAddress.Loopback, 8001);
3352 s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3355 s.ReceiveFrom (buffer, 0, -1, (SocketFlags) 666,
3357 Assert.Fail ("#A1");
3358 } catch (ArgumentOutOfRangeException ex) {
3359 // Specified argument was out of the range of valid values
3360 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#A2");
3361 Assert.IsNull (ex.InnerException, "#A3");
3362 Assert.IsNotNull (ex.Message, "#A4");
3363 Assert.AreEqual ("size", ex.ParamName, "#A5");
3368 // size > buffer length
3369 s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3372 s.ReceiveFrom (buffer, 0, (buffer.Length + 1), (SocketFlags) 666,
3374 Assert.Fail ("#B1");
3375 } catch (ArgumentOutOfRangeException ex) {
3376 // Specified argument was out of the range of valid values
3377 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#B2");
3378 Assert.IsNull (ex.InnerException, "#B3");
3379 Assert.IsNotNull (ex.Message, "#B4");
3380 Assert.AreEqual ("size", ex.ParamName, "#B5");
3385 // offset + size > buffer length
3386 s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3389 s.ReceiveFrom (buffer, 2, 4, (SocketFlags) 666, ref remoteEP);
3390 Assert.Fail ("#C1");
3391 } catch (ArgumentOutOfRangeException ex) {
3392 // Specified argument was out of the range of valid values
3393 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#C2");
3394 Assert.IsNull (ex.InnerException, "#C3");
3395 Assert.IsNotNull (ex.Message, "#C4");
3396 Assert.AreEqual ("size", ex.ParamName, "#C5");
3402 [Test] // ReceiveFrom (Byte [], Int32, Int32, SocketFlags, ref EndPoint)
3403 public void ReceiveFrom4_Socket_Closed ()
3405 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3409 byte [] buffer = new byte [5];
3410 EndPoint remoteEP = new IPEndPoint (IPAddress.Loopback, 8001);
3412 s.ReceiveFrom (buffer, -1, -1, (SocketFlags) 666,
3415 } catch (ObjectDisposedException ex) {
3416 // Cannot access a disposed object
3417 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
3418 Assert.IsNull (ex.InnerException, "#3");
3419 Assert.IsNotNull (ex.Message, "#4");
3420 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
3425 public void ReceiveRemoteClosed ()
3427 Socket sock = new Socket (AddressFamily.InterNetwork,
3430 sock.Bind (new IPEndPoint (IPAddress.Loopback, 1257));
3434 Thread client_thread = new Thread (new ThreadStart (RRCClientThread));
3435 client_thread.Start ();
3437 Socket client = sock.Accept ();
3438 NetworkStream stream = new NetworkStream (client);
3439 stream.WriteByte (0x00);
3440 stream.WriteByte (0x00);
3444 RRCReady.WaitOne (1000, false);
3445 Assert.IsTrue (RRCLastRead);
3449 // Test case for bug #471580
3451 public void UdpDoubleBind ()
3453 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
3454 s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, 1);
3456 s.Bind (new IPEndPoint (IPAddress.Any, 12345));
3458 Socket ss = new Socket (AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
3459 ss.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, 1);
3461 ss.Bind (new IPEndPoint (IPAddress.Any, 12345));
3463 // If we make it this far, we succeeded.
3471 [Category ("NotOnMac")]
3472 public void ConnectedProperty ()
3474 TcpListener listener = new TcpListener (IPAddress.Loopback, 23456);
3477 Socket client = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
3478 client.Connect (IPAddress.Loopback, 23456);
3479 Socket server = listener.AcceptSocket ();
3482 server.EndSend(server.BeginSend (new byte[10], 0, 10, SocketFlags.None, null, null));
3485 server.EndReceive (server.BeginReceive (new byte[10], 0, 10, SocketFlags.None, null, null));
3488 Assert.IsTrue (!client.Connected);
3489 Assert.IsTrue (!server.Connected);
3498 [Test] // GetSocketOption (SocketOptionLevel, SocketOptionName)
3499 public void GetSocketOption1_Socket_Closed ()
3501 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
3504 s.GetSocketOption (0, 0);
3506 } catch (ObjectDisposedException ex) {
3507 // Cannot access a disposed object
3508 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
3509 Assert.IsNull (ex.InnerException, "#3");
3510 Assert.IsNotNull (ex.Message, "#4");
3511 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
3515 [Test] // GetSocketOption (SocketOptionLevel, SocketOptionName, Byte [])
3516 public void GetSocketOption2_OptionValue_Null ()
3518 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
3520 s.GetSocketOption (SocketOptionLevel.Socket, SocketOptionName.Linger,
3523 } catch (SocketException ex) {
3524 // The system detected an invalid pointer address in attempting
3525 // to use a pointer argument in a call
3526 Assert.AreEqual (typeof (SocketException), ex.GetType (), "#2");
3527 Assert.AreEqual (10014, ex.ErrorCode, "#3");
3528 Assert.IsNull (ex.InnerException, "#4");
3529 Assert.IsNotNull (ex.Message, "#5");
3530 Assert.AreEqual (10014, ex.NativeErrorCode, "#6");
3532 Assert.AreEqual (SocketError.Fault, ex.SocketErrorCode, "#7");
3537 [Test] // GetSocketOption (SocketOptionLevel, SocketOptionName, Byte [])
3538 public void GetSocketOption2_Socket_Closed ()
3540 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
3543 s.GetSocketOption (0, 0, (byte []) null);
3545 } catch (ObjectDisposedException ex) {
3546 // Cannot access a disposed object
3547 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
3548 Assert.IsNull (ex.InnerException, "#3");
3549 Assert.IsNotNull (ex.Message, "#4");
3550 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
3554 [Test] // GetSocketOption (SocketOptionLevel, SocketOptionName, Int32)
3555 public void GetSocketOption3_Socket_Closed ()
3557 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
3560 s.GetSocketOption (0, 0, 0);
3562 } catch (ObjectDisposedException ex) {
3563 // Cannot access a disposed object
3564 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
3565 Assert.IsNull (ex.InnerException, "#3");
3566 Assert.IsNotNull (ex.Message, "#4");
3567 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
3571 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Byte [])
3572 public void SetSocketOption1_DontLinger ()
3574 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
3575 s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.DontLinger,
3576 new byte [] { 0x00 });
3577 s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.DontLinger,
3578 new byte [] { 0x01 });
3582 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Byte [])
3583 public void SetSocketOption1_DontLinger_Null ()
3585 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
3587 s.SetSocketOption (SocketOptionLevel.Socket,
3588 SocketOptionName.DontLinger, (byte []) null);
3590 } catch (SocketException ex) {
3591 // The system detected an invalid pointer address in attempting
3592 // to use a pointer argument in a call
3593 Assert.AreEqual (typeof (SocketException), ex.GetType (), "#2");
3594 Assert.AreEqual (10014, ex.ErrorCode, "#3");
3595 Assert.IsNull (ex.InnerException, "#4");
3596 Assert.IsNotNull (ex.Message, "#5");
3597 Assert.AreEqual (10014, ex.NativeErrorCode, "#6");
3599 Assert.AreEqual (SocketError.Fault, ex.SocketErrorCode, "#7");
3605 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Byte [])
3606 public void SetSocketOption1_Linger_Null ()
3608 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
3610 s.SetSocketOption (SocketOptionLevel.Socket,
3611 SocketOptionName.DontLinger, (byte []) null);
3613 } catch (SocketException ex) {
3614 // The system detected an invalid pointer address in attempting
3615 // to use a pointer argument in a call
3616 Assert.AreEqual (typeof (SocketException), ex.GetType (), "#2");
3617 Assert.AreEqual (10014, ex.ErrorCode, "#3");
3618 Assert.IsNull (ex.InnerException, "#4");
3619 Assert.IsNotNull (ex.Message, "#5");
3620 Assert.AreEqual (10014, ex.NativeErrorCode, "#6");
3622 Assert.AreEqual (SocketError.Fault, ex.SocketErrorCode, "#7");
3628 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Byte [])
3629 public void SetSocketOption1_Socket_Close ()
3631 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
3634 s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.DontLinger,
3635 new byte [] { 0x00 });
3637 } catch (ObjectDisposedException ex) {
3638 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
3639 Assert.IsNull (ex.InnerException, "#3");
3640 Assert.IsNotNull (ex.Message, "#4");
3641 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
3645 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Int32)
3646 public void SetSocketOption2_DontLinger ()
3648 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
3649 s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.DontLinger, 0);
3650 s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.DontLinger, 5);
3654 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Int32)
3655 [Category ("NotWorking")]
3656 public void SetSocketOption2_Linger ()
3658 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
3659 s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.Linger, 0);
3660 s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.Linger, 5);
3664 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Int32)
3665 public void SetSocketOption2_Socket_Closed ()
3667 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
3670 s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.DontLinger, 0);
3672 } catch (ObjectDisposedException ex) {
3673 // Cannot access a disposed object
3674 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
3675 Assert.IsNull (ex.InnerException, "#3");
3676 Assert.IsNotNull (ex.Message, "#4");
3677 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
3681 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
3682 public void SetSocketOption3_AddMembershipIPv4_IPv6MulticastOption ()
3684 IPAddress mcast_addr = IPAddress.Parse ("239.255.255.250");
3686 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp)) {
3687 s.Bind (new IPEndPoint (IPAddress.Any, 1901));
3689 s.SetSocketOption (SocketOptionLevel.IP, SocketOptionName.AddMembership,
3690 new IPv6MulticastOption (mcast_addr));
3692 } catch (ArgumentException ex) {
3693 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
3694 Assert.IsNull (ex.InnerException, "#3");
3695 Assert.IsNotNull (ex.Message, "#4");
3697 // The specified value is not a valid 'MulticastOption'
3698 Assert.IsTrue (ex.Message.IndexOf ("'MulticastOption'") != -1, "#5:" + ex.Message);
3699 Assert.AreEqual ("optionValue", ex.ParamName, "#6");
3701 Assert.AreEqual ("optionValue", ex.Message, "#5");
3702 Assert.IsNull (ex.ParamName, "#6");
3708 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
3709 public void SetSocketOption3_AddMembershipIPv4_MulticastOption ()
3711 IPAddress mcast_addr = IPAddress.Parse ("239.255.255.250");
3713 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp)) {
3714 s.Bind (new IPEndPoint (IPAddress.Any, 1901));
3715 s.SetSocketOption (SocketOptionLevel.IP, SocketOptionName.AddMembership,
3716 new MulticastOption (mcast_addr));
3720 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
3721 [Category ("NotWorking")]
3722 public void SetSocketOption3_AddMembershipIPv4_Socket_NotBound ()
3724 IPAddress mcast_addr = IPAddress.Parse ("239.255.255.250");
3726 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
3728 s.SetSocketOption (SocketOptionLevel.IP, SocketOptionName.AddMembership,
3729 new MulticastOption (mcast_addr));
3731 } catch (SocketException ex) {
3732 // An invalid argument was supplied
3733 Assert.AreEqual (typeof (SocketException), ex.GetType (), "#2");
3734 Assert.AreEqual (10022, ex.ErrorCode, "#3");
3735 Assert.IsNull (ex.InnerException, "#4");
3736 Assert.IsNotNull (ex.Message, "#5");
3737 Assert.AreEqual (10022, ex.NativeErrorCode, "#6");
3739 Assert.AreEqual (SocketError.InvalidArgument, ex.SocketErrorCode, "#7");
3746 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
3747 public void SetSocketOption3_AddMembershipIPv6_IPv6MulticastOption ()
3750 if (!Socket.OSSupportsIPv6)
3752 if (!Socket.SupportsIPv6)
3754 Assert.Ignore ("IPv6 not enabled.");
3756 IPAddress mcast_addr = IPAddress.Parse ("ff02::1");
3758 using (Socket s = new Socket (AddressFamily.InterNetworkV6, SocketType.Dgram, ProtocolType.Udp)) {
3759 s.Bind (new IPEndPoint (IPAddress.IPv6Any, 1902));
3760 s.SetSocketOption (SocketOptionLevel.IPv6, SocketOptionName.AddMembership,
3761 new IPv6MulticastOption (mcast_addr));
3765 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
3766 public void SetSocketOption3_AddMembershipIPv6_MulticastOption ()
3769 if (!Socket.OSSupportsIPv6)
3771 if (!Socket.SupportsIPv6)
3773 Assert.Ignore ("IPv6 not enabled.");
3775 IPAddress mcast_addr = IPAddress.Parse ("ff02::1");
3777 using (Socket s = new Socket (AddressFamily.InterNetworkV6, SocketType.Dgram, ProtocolType.Udp)) {
3778 s.Bind (new IPEndPoint (IPAddress.IPv6Any, 1902));
3780 s.SetSocketOption (SocketOptionLevel.IPv6, SocketOptionName.AddMembership,
3781 new MulticastOption (mcast_addr));
3783 } catch (ArgumentException ex) {
3784 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
3785 Assert.IsNull (ex.InnerException, "#3");
3786 Assert.IsNotNull (ex.Message, "#4");
3788 // The specified value is not a valid 'IPv6MulticastOption'
3789 Assert.IsTrue (ex.Message.IndexOf ("'IPv6MulticastOption'") != -1, "#5:" + ex.Message);
3790 Assert.AreEqual ("optionValue", ex.ParamName, "#6");
3792 Assert.AreEqual ("optionValue", ex.Message, "#5");
3793 Assert.IsNull (ex.ParamName, "#6");
3799 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
3800 [Category ("NotWorking")]
3801 public void SetSocketOption3_AddMembershipIPv6_Socket_NotBound ()
3803 IPAddress mcast_addr = IPAddress.Parse ("ff02::1");
3805 Socket s = new Socket (AddressFamily.InterNetworkV6, SocketType.Dgram, ProtocolType.Udp);
3807 s.SetSocketOption (SocketOptionLevel.IPv6, SocketOptionName.AddMembership,
3808 new IPv6MulticastOption (mcast_addr));
3810 } catch (SocketException ex) {
3811 // An invalid argument was supplied
3812 Assert.AreEqual (typeof (SocketException), ex.GetType (), "#2");
3813 Assert.AreEqual (10022, ex.ErrorCode, "#3");
3814 Assert.IsNull (ex.InnerException, "#4");
3815 Assert.IsNotNull (ex.Message, "#5");
3816 Assert.AreEqual (10022, ex.NativeErrorCode, "#6");
3818 Assert.AreEqual (SocketError.InvalidArgument, ex.SocketErrorCode, "#7");
3825 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
3826 public void SetSocketOption3_DontLinger_Boolean ()
3828 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
3830 s.SetSocketOption (SocketOptionLevel.Socket,
3831 SocketOptionName.DontLinger, (object) false);
3833 } catch (ArgumentException ex) {
3834 // The specified value is not valid
3835 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
3836 Assert.IsNull (ex.InnerException, "#3");
3838 Assert.IsNotNull (ex.Message, "#4");
3839 Assert.AreEqual ("optionValue", ex.ParamName, "#5");
3841 Assert.AreEqual ("optionValue", ex.Message, "#4");
3842 Assert.IsNull (ex.ParamName, "#5");
3848 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
3849 public void SetSocketOption3_DontLinger_Int32 ()
3851 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
3853 s.SetSocketOption (SocketOptionLevel.Socket,
3854 SocketOptionName.DontLinger, (object) 0);
3856 } catch (ArgumentException ex) {
3857 // The specified value is not valid
3858 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
3859 Assert.IsNull (ex.InnerException, "#3");
3861 Assert.IsNotNull (ex.Message, "#4");
3862 Assert.AreEqual ("optionValue", ex.ParamName, "#5");
3864 Assert.AreEqual ("optionValue", ex.Message, "#4");
3865 Assert.IsNull (ex.ParamName, "#5");
3871 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
3872 public void SetSocketOption3_DontLinger_LingerOption ()
3874 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
3876 s.SetSocketOption (SocketOptionLevel.Socket,
3877 SocketOptionName.DontLinger, new LingerOption (true, 1000));
3879 } catch (ArgumentException ex) {
3880 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
3881 Assert.IsNull (ex.InnerException, "#3");
3883 // The specified value is not valid
3884 Assert.IsNotNull (ex.Message, "#4");
3885 Assert.AreEqual ("optionValue", ex.ParamName, "#5");
3887 Assert.AreEqual ("optionValue", ex.Message, "#4");
3888 Assert.IsNull (ex.ParamName, "#5");
3894 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
3895 public void SetSocketOption3_Linger_Boolean ()
3897 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
3899 s.SetSocketOption (SocketOptionLevel.Socket,
3900 SocketOptionName.Linger, (object) false);
3902 } catch (ArgumentException ex) {
3903 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
3904 Assert.IsNull (ex.InnerException, "#3");
3906 // The specified value is not valid
3907 Assert.IsNotNull (ex.Message, "#4");
3908 Assert.AreEqual ("optionValue", ex.ParamName, "#5");
3910 Assert.AreEqual ("optionValue", ex.Message, "#4");
3911 Assert.IsNull (ex.ParamName, "#5");
3917 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
3918 public void SetSocketOption3_Linger_Int32 ()
3920 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
3922 s.SetSocketOption (SocketOptionLevel.Socket,
3923 SocketOptionName.Linger, (object) 0);
3925 } catch (ArgumentException ex) {
3926 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
3927 Assert.IsNull (ex.InnerException, "#3");
3929 // The specified value is not valid
3930 Assert.IsNotNull (ex.Message, "#4");
3931 Assert.AreEqual ("optionValue", ex.ParamName, "#5");
3933 Assert.AreEqual ("optionValue", ex.Message, "#4");
3934 Assert.IsNull (ex.ParamName, "#5");
3940 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
3941 public void SetSocketOption3_Linger_LingerOption ()
3943 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
3944 s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.Linger,
3945 new LingerOption (false, 0));
3946 s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.Linger,
3947 new LingerOption (true, 0));
3948 s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.Linger,
3949 new LingerOption (false, 1000));
3950 s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.Linger,
3951 new LingerOption (true, 1000));
3955 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
3956 public void SetSocketOption3_DropMembershipIPv4_IPv6MulticastOption ()
3958 IPAddress mcast_addr = IPAddress.Parse ("239.255.255.250");
3960 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp)) {
3961 s.Bind (new IPEndPoint (IPAddress.Any, 1901));
3962 s.SetSocketOption (SocketOptionLevel.IP, SocketOptionName.AddMembership,
3963 new MulticastOption (mcast_addr));
3965 s.SetSocketOption (SocketOptionLevel.IP, SocketOptionName.DropMembership,
3966 new IPv6MulticastOption (mcast_addr));
3968 } catch (ArgumentException ex) {
3969 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
3970 Assert.IsNull (ex.InnerException, "#3");
3971 Assert.IsNotNull (ex.Message, "#4");
3973 // The specified value is not a valid 'MulticastOption'
3974 Assert.IsTrue (ex.Message.IndexOf ("'MulticastOption'") != -1, "#5:" + ex.Message);
3975 Assert.AreEqual ("optionValue", ex.ParamName, "#6");
3977 Assert.AreEqual ("optionValue", ex.Message, "#5");
3978 Assert.IsNull (ex.ParamName, "#6");
3984 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
3985 public void SetSocketOption3_DropMembershipIPv4_MulticastOption ()
3987 IPAddress mcast_addr = IPAddress.Parse ("239.255.255.250");
3989 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp)) {
3990 MulticastOption option = new MulticastOption (mcast_addr);
3992 s.Bind (new IPEndPoint (IPAddress.Any, 1901));
3993 s.SetSocketOption (SocketOptionLevel.IP, SocketOptionName.AddMembership,
3995 s.SetSocketOption (SocketOptionLevel.IP, SocketOptionName.DropMembership,
4000 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
4001 [Category ("NotWorking")]
4002 public void SetSocketOption3_DropMembershipIPv4_Socket_NotBound ()
4004 IPAddress mcast_addr = IPAddress.Parse ("239.255.255.250");
4006 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
4008 s.SetSocketOption (SocketOptionLevel.IP, SocketOptionName.DropMembership,
4009 new MulticastOption (mcast_addr));
4011 } catch (SocketException ex) {
4012 // An invalid argument was supplied
4013 Assert.AreEqual (typeof (SocketException), ex.GetType (), "#2");
4014 Assert.AreEqual (10022, ex.ErrorCode, "#3");
4015 Assert.IsNull (ex.InnerException, "#4");
4016 Assert.IsNotNull (ex.Message, "#5");
4017 Assert.AreEqual (10022, ex.NativeErrorCode, "#6");
4019 Assert.AreEqual (SocketError.InvalidArgument, ex.SocketErrorCode, "#7");
4026 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
4027 public void SetSocketOption3_DropMembershipIPv6_IPv6MulticastOption ()
4030 if (!Socket.OSSupportsIPv6)
4032 if (!Socket.SupportsIPv6)
4034 Assert.Ignore ("IPv6 not enabled.");
4036 using (Socket s = new Socket (AddressFamily.InterNetworkV6, SocketType.Dgram, ProtocolType.Udp)) {
4037 IPv6MulticastOption option = new IPv6MulticastOption (
4038 IPAddress.Parse ("ff02::1"));
4040 s.Bind (new IPEndPoint (IPAddress.IPv6Any, 1902));
4041 s.SetSocketOption (SocketOptionLevel.IPv6, SocketOptionName.AddMembership,
4043 s.SetSocketOption (SocketOptionLevel.IPv6, SocketOptionName.DropMembership,
4048 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
4049 public void SetSocketOption3_DropMembershipIPv6_MulticastOption ()
4052 if (!Socket.OSSupportsIPv6)
4054 if (!Socket.SupportsIPv6)
4056 Assert.Ignore ("IPv6 not enabled.");
4058 IPAddress mcast_addr = IPAddress.Parse ("ff02::1");
4060 using (Socket s = new Socket (AddressFamily.InterNetworkV6, SocketType.Dgram, ProtocolType.Udp)) {
4061 s.Bind (new IPEndPoint (IPAddress.IPv6Any, 1902));
4062 s.SetSocketOption (SocketOptionLevel.IPv6, SocketOptionName.AddMembership,
4063 new IPv6MulticastOption (mcast_addr));
4065 s.SetSocketOption (SocketOptionLevel.IPv6, SocketOptionName.DropMembership,
4066 new MulticastOption (mcast_addr));
4068 } catch (ArgumentException ex) {
4069 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
4070 Assert.IsNull (ex.InnerException, "#3");
4071 Assert.IsNotNull (ex.Message, "#4");
4073 // The specified value is not a valid 'IPv6MulticastOption'
4074 Assert.IsTrue (ex.Message.IndexOf ("'IPv6MulticastOption'") != -1, "#5:" + ex.Message);
4075 Assert.AreEqual ("optionValue", ex.ParamName, "#6");
4077 Assert.AreEqual ("optionValue", ex.Message, "#5");
4078 Assert.IsNull (ex.ParamName, "#6");
4084 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
4085 [Category ("NotWorking")]
4086 public void SetSocketOption3_DropMembershipIPv6_Socket_NotBound ()
4088 IPAddress mcast_addr = IPAddress.Parse ("ff02::1");
4090 Socket s = new Socket (AddressFamily.InterNetworkV6, SocketType.Dgram, ProtocolType.Udp);
4092 s.SetSocketOption (SocketOptionLevel.IPv6, SocketOptionName.DropMembership,
4093 new IPv6MulticastOption (mcast_addr));
4095 } catch (SocketException ex) {
4096 // An invalid argument was supplied
4097 Assert.AreEqual (typeof (SocketException), ex.GetType (), "#2");
4098 Assert.AreEqual (10022, ex.ErrorCode, "#3");
4099 Assert.IsNull (ex.InnerException, "#4");
4100 Assert.IsNotNull (ex.Message, "#5");
4101 Assert.AreEqual (10022, ex.NativeErrorCode, "#6");
4103 Assert.AreEqual (SocketError.InvalidArgument, ex.SocketErrorCode, "#7");
4110 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
4111 public void SetSocketOption3_OptionValue_Null ()
4113 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
4115 s.SetSocketOption (SocketOptionLevel.Socket,
4116 SocketOptionName.Linger, (object) null);
4118 } catch (ArgumentNullException ex) {
4119 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
4120 Assert.IsNull (ex.InnerException, "#3");
4121 Assert.IsNotNull (ex.Message, "#4");
4122 Assert.AreEqual ("optionValue", ex.ParamName, "#5");
4127 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
4128 public void SetSocketOption3_Socket_Closed ()
4130 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
4133 s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.Linger,
4134 new LingerOption (false, 0));
4136 } catch (ObjectDisposedException ex) {
4137 // Cannot access a disposed object
4138 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
4139 Assert.IsNull (ex.InnerException, "#3");
4140 Assert.IsNotNull (ex.Message, "#4");
4141 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
4146 public void Shutdown_NoConnect ()
4148 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
4149 s.Bind (new IPEndPoint (IPAddress.Loopback, 0));
4152 s.Shutdown (SocketShutdown.Both);
4154 } catch (SocketException exc) {
4155 Assert.AreEqual (10057, exc.ErrorCode, "#2");
4162 [ExpectedException (typeof (NullReferenceException))]
4163 public void ReceiveAsync_Null ()
4165 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
4166 s.ReceiveAsync (null);
4171 [ExpectedException (typeof (NullReferenceException))]
4172 public void ReceiveAsync_Default ()
4174 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
4175 SocketAsyncEventArgs saea = new SocketAsyncEventArgs ();
4176 s.ReceiveAsync (saea);
4182 [ExpectedException (typeof (NullReferenceException))]
4183 public void ReceiveAsync_NullBuffer ()
4185 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
4186 SocketAsyncEventArgs saea = new SocketAsyncEventArgs ();
4187 saea.SetBuffer (null, 0, 0);
4188 s.ReceiveAsync (null);
4193 [ExpectedException (typeof (ObjectDisposedException))]
4194 public void ReceiveAsync_ClosedSocket ()
4196 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
4198 s.ReceiveAsync (null);
4202 [ExpectedException (typeof (NullReferenceException))]
4203 public void SendAsync_Null ()
4205 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
4211 [ExpectedException (typeof (NullReferenceException))]
4212 public void SendAsync_Default ()
4214 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
4215 SocketAsyncEventArgs saea = new SocketAsyncEventArgs ();
4222 [ExpectedException (typeof (NullReferenceException))]
4223 public void SendAsync_NullBuffer ()
4225 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
4226 SocketAsyncEventArgs saea = new SocketAsyncEventArgs ();
4227 saea.SetBuffer (null, 0, 0);
4233 [ExpectedException (typeof (ObjectDisposedException))]
4234 public void SendAsync_ClosedSocket ()
4236 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);