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)
13 using System.Collections;
14 using System.Threading;
15 using System.Reflection;
16 using System.Text.RegularExpressions;
18 using System.Net.Sockets;
19 using NUnit.Framework;
22 using System.Collections.Generic;
24 namespace MonoTests.System.Net.Sockets
27 public class SocketTest
29 // note: also used in SocketCas tests
30 public const string BogusAddress = "192.168.244.244";
31 public const int BogusPort = 23483;
34 public void ConnectIPAddressAny ()
36 IPEndPoint ep = new IPEndPoint (IPAddress.Any, 0);
38 /* UDP sockets use Any to disconnect
40 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp)) {
45 } catch (SocketException ex) {
46 Assert.AreEqual (10049, ex.ErrorCode, "#2");
51 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
56 } catch (SocketException ex) {
57 Assert.AreEqual (10049, ex.ErrorCode, "#4");
62 [Ignore ("Bug #75158")] // Looks like MS fails after the .ctor, when you try to use the socket
63 public void IncompatibleAddress ()
65 IPEndPoint epIPv6 = new IPEndPoint (IPAddress.IPv6Any,
69 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP)) {
74 } catch (SocketException ex) {
75 // address incompatible with protocol
76 int expectedError = 10047;
77 Assert.AreEqual (expectedError, ex.ErrorCode,
83 [Category ("InetAccess")]
84 public void BogusEndConnect ()
86 IPAddress ipOne = IPAddress.Parse (BogusAddress);
87 IPEndPoint ipEP = new IPEndPoint (ipOne, BogusPort);
88 Socket sock = new Socket (ipEP.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
89 IAsyncResult ar = sock.BeginConnect (ipEP, null, null);
92 // should raise an exception because connect was bogus
95 } catch (SocketException ex) {
96 // Actual error code depends on network configuration.
97 var error = (SocketError) ex.ErrorCode;
98 Assert.That (error == SocketError.TimedOut ||
99 error == SocketError.ConnectionRefused ||
100 error == SocketError.NetworkUnreachable ||
101 error == SocketError.HostUnreachable, "#2");
106 [ExpectedException (typeof (ArgumentNullException))]
107 public void SelectEmpty ()
109 ArrayList list = new ArrayList ();
110 Socket.Select (list, list, list, 1000);
113 private bool BlockingConnect (bool block)
115 IPEndPoint ep = new IPEndPoint(IPAddress.Loopback, 1234);
116 Socket server = new Socket(AddressFamily.InterNetwork,
120 server.Blocking=block;
124 Socket conn = new Socket (AddressFamily.InterNetwork,
129 Socket client = server.Accept();
130 bool client_block = client.Blocking;
136 return(client_block);
140 public void AcceptBlockingStatus()
144 block = BlockingConnect(true);
145 Assert.AreEqual (block, true, "BlockingStatus01");
147 block = BlockingConnect(false);
148 Assert.AreEqual (block, false, "BlockingStatus02");
151 static bool CFAConnected = false;
152 static ManualResetEvent CFACalledBack;
154 private static void CFACallback (IAsyncResult asyncResult)
156 Socket sock = (Socket)asyncResult.AsyncState;
157 CFAConnected = sock.Connected;
159 if (sock.Connected) {
160 sock.EndConnect (asyncResult);
163 CFACalledBack.Set ();
166 [Test] // Connect (IPEndPoint)
167 public void Connect1_RemoteEP_Null ()
169 Socket s = new Socket (AddressFamily.InterNetwork,
170 SocketType.Stream, ProtocolType.Tcp);
172 s.Connect ((IPEndPoint) null);
174 } catch (ArgumentNullException ex) {
175 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
176 Assert.IsNull (ex.InnerException, "#3");
177 Assert.IsNotNull (ex.Message, "#4");
178 Assert.AreEqual ("remoteEP", ex.ParamName, "#5");
183 public void ConnectFailAsync ()
185 Socket sock = new Socket (AddressFamily.InterNetwork,
188 sock.Blocking = false;
189 CFACalledBack = new ManualResetEvent (false);
190 CFACalledBack.Reset ();
192 /* Need a port that is not being used for
195 sock.BeginConnect (new IPEndPoint (IPAddress.Loopback,
197 new AsyncCallback (CFACallback),
199 CFACalledBack.WaitOne ();
201 Assert.AreEqual (CFAConnected, false, "ConnectFail");
205 public void SetSocketOptionBoolean ()
207 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 1);
208 Socket sock = new Socket (ep.Address.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
210 sock.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.KeepAlive, true);
216 public void TestSelect1 ()
218 Socket srv = CreateServer ();
219 ClientSocket clnt = new ClientSocket (srv.LocalEndPoint);
220 Thread th = new Thread (new ThreadStart (clnt.ConnectSleepClose));
226 ArrayList list = new ArrayList ();
227 ArrayList empty = new ArrayList ();
229 Socket.Select (list, empty, empty, 100);
230 Assert.AreEqual (0, empty.Count, "#01");
231 Assert.AreEqual (1, list.Count, "#02");
232 Socket.Select (empty, list, empty, 100);
233 Assert.AreEqual (0, empty.Count, "#03");
234 Assert.AreEqual (1, list.Count, "#04");
235 Socket.Select (list, empty, empty, -1);
236 Assert.AreEqual (0, empty.Count, "#05");
237 Assert.AreEqual (1, list.Count, "#06");
238 // Need to read the 10 bytes from the client to avoid a RST
239 byte [] bytes = new byte [10];
248 static Socket CreateServer ()
250 Socket sock = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
251 sock.Bind (new IPEndPoint (IPAddress.Loopback, 0));
260 public ClientSocket (EndPoint ep)
263 sock = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
266 public void ConnectSleepClose ()
275 byte [] b = new byte [10];
280 byte[] buf = new byte[100];
283 [ExpectedException (typeof (ObjectDisposedException))]
284 public void Disposed2 ()
286 Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
293 [ExpectedException (typeof (ObjectDisposedException))]
294 public void Disposed6 ()
296 Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
303 [ExpectedException (typeof (ObjectDisposedException))]
304 public void Disposed7 ()
306 Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
313 [ExpectedException (typeof (ObjectDisposedException))]
314 public void Disposed15 ()
316 Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
323 [ExpectedException (typeof (ObjectDisposedException))]
324 public void Disposed16 ()
326 Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
333 [ExpectedException (typeof (ObjectDisposedException))]
334 public void Disposed17 ()
336 Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
343 [ExpectedException (typeof (ObjectDisposedException))]
344 public void Disposed18 ()
346 Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
349 s.Send (buf, 0, 10, 0);
353 [ExpectedException (typeof (ObjectDisposedException))]
354 public void Disposed19 ()
356 Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
357 EndPoint ep = new IPEndPoint (IPAddress.Any, 31337);
360 s.SendTo (buf, 0, ep);
364 [ExpectedException (typeof (ObjectDisposedException))]
365 public void Disposed20 ()
367 Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
368 EndPoint ep = new IPEndPoint (IPAddress.Any, 31337);
371 s.SendTo (buf, 10, 0, ep);
375 [ExpectedException (typeof (ObjectDisposedException))]
376 public void Disposed21 ()
378 Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
379 EndPoint ep = new IPEndPoint (IPAddress.Any, 31337);
382 s.SendTo (buf, 0, 10, 0, ep);
386 [ExpectedException (typeof (ObjectDisposedException))]
387 public void Disposed22 ()
389 Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
390 EndPoint ep = new IPEndPoint (IPAddress.Any, 31337);
397 [ExpectedException (typeof (ObjectDisposedException))]
398 public void Disposed23 ()
400 Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
407 public void GetHashCodeTest ()
409 Socket server = new Socket (AddressFamily.InterNetwork,
410 SocketType.Stream, ProtocolType.Tcp);
411 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
416 Socket client = new Socket (AddressFamily.InterNetwork,
417 SocketType.Stream, ProtocolType.Tcp);
418 int hashcodeA = client.GetHashCode ();
420 int hashcodeB = client.GetHashCode ();
421 Assert.AreEqual (hashcodeA, hashcodeB, "#1");
423 int hashcodeC = client.GetHashCode ();
424 Assert.AreEqual (hashcodeB, hashcodeC, "#2");
428 static ManualResetEvent SocketError_event = new ManualResetEvent (false);
430 private static void SocketError_callback (IAsyncResult ar)
432 Socket sock = (Socket)ar.AsyncState;
435 sock.EndConnect (ar);
438 SocketError_event.Set ();
442 public void SocketErrorTest ()
444 Socket sock = new Socket (AddressFamily.InterNetwork,
447 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
450 SocketError_event.Reset ();
452 sock.Blocking = false;
453 sock.BeginConnect (ep, new AsyncCallback(SocketError_callback),
456 if (SocketError_event.WaitOne (2000, false) == false) {
457 Assert.Fail ("SocketError wait timed out");
460 Assert.AreEqual (false, sock.Connected, "SocketError #1");
464 error = (int)sock.GetSocketOption (SocketOptionLevel.Socket, SocketOptionName.Error);
465 Assert.AreEqual (10061, error, "SocketError #2");
467 error = (int)sock.GetSocketOption (SocketOptionLevel.Socket, SocketOptionName.Error);
468 Assert.AreEqual (10061, error, "SocketError #3");
475 public void SocketInformationCtor ()
480 public void DontFragmentDefaultTcp ()
482 Socket sock = new Socket (AddressFamily.InterNetwork,
486 Assert.AreEqual (false, sock.DontFragment, "DontFragmentDefaultTcp");
492 [Category ("NotWorking")] // DontFragment doesn't work
493 public void DontFragmentChangeTcp ()
495 Socket sock = new Socket (AddressFamily.InterNetwork,
499 sock.DontFragment = true;
501 Assert.AreEqual (true, sock.DontFragment, "DontFragmentChangeTcp");
507 public void DontFragmentDefaultUdp ()
509 Socket sock = new Socket (AddressFamily.InterNetwork,
513 Assert.AreEqual (false, sock.DontFragment, "DontFragmentDefaultUdp");
519 [Category ("NotWorking")] // DontFragment doesn't work
520 public void DontFragmentChangeUdp ()
522 Socket sock = new Socket (AddressFamily.InterNetwork,
526 sock.DontFragment = true;
528 Assert.AreEqual (true, sock.DontFragment, "DontFragmentChangeUdp");
534 [ExpectedException (typeof(ObjectDisposedException))]
535 public void DontFragmentClosed ()
537 Socket sock = new Socket (AddressFamily.InterNetwork,
543 bool val = sock.DontFragment;
547 [Category ("NotWorking")] // Need to pick a non-IP AddressFamily that "works" on both mono and ms, this one only works on ms
548 public void DontFragment ()
550 Socket sock = new Socket (AddressFamily.NetBios,
551 SocketType.Seqpacket,
552 ProtocolType.Unspecified);
555 sock.DontFragment = true;
556 Assert.Fail ("DontFragment #1");
557 } catch (NotSupportedException) {
559 Assert.Fail ("DontFragment #2");
566 public void EnableBroadcastDefaultTcp ()
568 Socket sock = new Socket (AddressFamily.InterNetwork,
573 bool value = sock.EnableBroadcast;
574 Assert.Fail ("EnableBroadcastDefaultTcp #1");
575 } catch (SocketException ex) {
576 Assert.AreEqual (10042, ex.ErrorCode, "EnableBroadcastDefaultTcp #2");
578 Assert.Fail ("EnableBroadcastDefaultTcp #2");
585 public void EnableBroadcastDefaultUdp ()
587 Socket sock = new Socket (AddressFamily.InterNetwork,
591 Assert.AreEqual (false, sock.EnableBroadcast, "EnableBroadcastDefaultUdp");
597 public void EnableBroadcastChangeTcp ()
599 Socket sock = new Socket (AddressFamily.InterNetwork,
604 sock.EnableBroadcast = true;
605 Assert.Fail ("EnableBroadcastChangeTcp #1");
606 } catch (SocketException ex) {
607 Assert.AreEqual (10042, ex.ErrorCode, "EnableBroadcastChangeTcp #2");
609 Assert.Fail ("EnableBroadcastChangeTcp #2");
616 public void EnableBroadcastChangeUdp ()
618 Socket sock = new Socket (AddressFamily.InterNetwork,
622 sock.EnableBroadcast = true;
624 Assert.AreEqual (true, sock.EnableBroadcast, "EnableBroadcastChangeUdp");
630 [ExpectedException (typeof(ObjectDisposedException))]
631 public void EnableBroadcastClosed ()
633 Socket sock = new Socket (AddressFamily.InterNetwork,
639 bool val = sock.EnableBroadcast;
642 /* Can't test the default for ExclusiveAddressUse as
643 * it's different on different versions and service
647 [Category ("NotWorking")] // Not supported on Linux
648 public void ExclusiveAddressUseUnbound ()
650 Socket sock = new Socket (AddressFamily.InterNetwork,
654 sock.ExclusiveAddressUse = true;
656 Assert.AreEqual (true, sock.ExclusiveAddressUse, "ExclusiveAddressUseUnbound");
662 [ExpectedException (typeof(InvalidOperationException))]
663 [Category ("NotWorking")] // Not supported on Linux
664 public void ExclusiveAddressUseBound ()
666 Socket sock = new Socket (AddressFamily.InterNetwork,
670 sock.Bind (new IPEndPoint (IPAddress.Any, 1235));
671 sock.ExclusiveAddressUse = true;
676 [ExpectedException (typeof(ObjectDisposedException))]
677 public void ExclusiveAddressUseClosed ()
679 Socket sock = new Socket (AddressFamily.InterNetwork,
685 bool val = sock.ExclusiveAddressUse;
689 public void IsBoundTcp ()
691 Socket sock = new Socket (AddressFamily.InterNetwork,
694 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
697 Assert.AreEqual (false, sock.IsBound, "IsBoundTcp #1");
700 Assert.AreEqual (true, sock.IsBound, "IsBoundTcp #2");
704 Socket sock2 = new Socket (AddressFamily.InterNetwork,
708 Assert.AreEqual (false, sock2.IsBound, "IsBoundTcp #3");
711 Assert.AreEqual (true, sock2.IsBound, "IsBoundTcp #4");
714 Assert.AreEqual (true, sock2.IsBound, "IsBoundTcp #5");
717 Assert.AreEqual (true, sock.IsBound, "IsBoundTcp #6");
721 public void IsBoundUdp ()
723 Socket sock = new Socket (AddressFamily.InterNetwork,
726 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
729 Assert.AreEqual (false, sock.IsBound, "IsBoundUdp #1");
732 Assert.AreEqual (true, sock.IsBound, "IsBoundUdp #2");
735 Assert.AreEqual (true, sock.IsBound, "IsBoundUdp #3");
738 sock = new Socket (AddressFamily.InterNetwork,
742 Assert.AreEqual (false, sock.IsBound, "IsBoundUdp #4");
745 Assert.AreEqual (true, sock.IsBound, "IsBoundUdp #5");
748 Assert.AreEqual (true, sock.IsBound, "IsBoundUdp #6");
752 /* Should not throw an exception */
753 public void IsBoundClosed ()
755 Socket sock = new Socket (AddressFamily.InterNetwork,
761 bool val = sock.IsBound;
764 /* Nothing much to test for LingerState */
767 public void MulticastLoopbackDefaultTcp ()
769 Socket sock = new Socket (AddressFamily.InterNetwork,
774 bool value = sock.MulticastLoopback;
775 Assert.Fail ("MulticastLoopbackDefaultTcp #1");
776 } catch (SocketException ex) {
777 Assert.AreEqual (10042, ex.ErrorCode, "MulticastLoopbackDefaultTcp #2");
779 Assert.Fail ("MulticastLoopbackDefaultTcp #2");
786 public void MulticastLoopbackChangeTcp ()
788 Socket sock = new Socket (AddressFamily.InterNetwork,
793 sock.MulticastLoopback = false;
794 Assert.Fail ("MulticastLoopbackChangeTcp #1");
795 } catch (SocketException ex) {
796 Assert.AreEqual (10042, ex.ErrorCode, "MulticastLoopbackChangeTcp #2");
798 Assert.Fail ("MulticastLoopbackChangeTcp #2");
805 public void MulticastLoopbackDefaultUdp ()
807 Socket sock = new Socket (AddressFamily.InterNetwork,
811 Assert.AreEqual (true, sock.MulticastLoopback, "MulticastLoopbackDefaultUdp");
817 public void MulticastLoopbackChangeUdp ()
819 Socket sock = new Socket (AddressFamily.InterNetwork,
823 sock.MulticastLoopback = false;
825 Assert.AreEqual (false, sock.MulticastLoopback, "MulticastLoopbackChangeUdp");
831 [ExpectedException (typeof(ObjectDisposedException))]
832 public void MulticastLoopbackClosed ()
834 Socket sock = new Socket (AddressFamily.InterNetwork,
840 bool val = sock.MulticastLoopback;
843 /* OSSupportsIPv6 depends on the environment */
846 [Category("NotWorking")] // We have different defaults for perf reasons
847 public void ReceiveBufferSizeDefault ()
849 Socket sock = new Socket (AddressFamily.InterNetwork,
853 Assert.AreEqual (8192, sock.ReceiveBufferSize, "ReceiveBufferSizeDefault");
859 [Category("NotWorking")] // We have different defaults for perf reasons
860 public void ReceiveBufferSizeDefaultUdp ()
862 Socket sock = new Socket (AddressFamily.InterNetwork,
866 Assert.AreEqual (8192, sock.ReceiveBufferSize, "ReceiveBufferSizeDefaultUdp");
872 public void ReceiveBufferSizeChange ()
874 Socket sock = new Socket (AddressFamily.InterNetwork,
878 sock.ReceiveBufferSize = 16384;
880 Assert.AreEqual (16384, sock.ReceiveBufferSize, "ReceiveBufferSizeChange");
886 [Category("NotWorking")] // We cannot totally remove buffers (minimum is set to 256
887 public void BuffersCheck_None ()
889 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
890 int original = s.ReceiveBufferSize;
891 s.ReceiveBufferSize = 0;
892 Assert.AreEqual (0, s.ReceiveBufferSize, "ReceiveBufferSize " + original.ToString ());
894 original = s.SendBufferSize;
895 s.SendBufferSize = 0;
896 Assert.AreEqual (0, s.SendBufferSize, "SendBufferSize " + original.ToString ());
901 [ExpectedException (typeof(ObjectDisposedException))]
902 public void ReceiveBufferSizeClosed ()
904 Socket sock = new Socket (AddressFamily.InterNetwork,
910 int val = sock.ReceiveBufferSize;
914 [Category("NotWorking")] // We have different defaults for perf reasons
915 public void SendBufferSizeDefault ()
917 Socket sock = new Socket (AddressFamily.InterNetwork,
921 Assert.AreEqual (8192, sock.SendBufferSize, "SendBufferSizeDefault");
927 [Category("NotWorking")] // We have different defaults for perf reasons
928 public void SendBufferSizeDefaultUdp ()
930 Socket sock = new Socket (AddressFamily.InterNetwork,
934 Assert.AreEqual (8192, sock.SendBufferSize, "SendBufferSizeDefaultUdp");
940 public void SendBufferSizeChange ()
942 Socket sock = new Socket (AddressFamily.InterNetwork,
946 sock.SendBufferSize = 16384;
948 Assert.AreEqual (16384, sock.SendBufferSize, "SendBufferSizeChange");
954 [ExpectedException (typeof(ObjectDisposedException))]
955 public void SendBufferSizeClosed ()
957 Socket sock = new Socket (AddressFamily.InterNetwork,
963 int val = sock.SendBufferSize;
966 /* No test for TTL default as it's platform dependent */
968 public void TtlChange ()
970 Socket sock = new Socket (AddressFamily.InterNetwork,
976 Assert.AreEqual (255, sock.Ttl, "TtlChange");
982 [Category ("NotOnMac")] // Mac doesn't throw when overflowing the ttl
983 public void TtlChangeOverflow ()
985 Socket sock = new Socket (AddressFamily.InterNetwork,
991 Assert.Fail ("TtlChangeOverflow #1");
992 } catch (SocketException ex) {
993 Assert.AreEqual (10022, ex.ErrorCode,
994 "TtlChangeOverflow #2");
996 Assert.Fail ("TtlChangeoverflow #3");
1002 /* Apparently you can set TTL=0 on the ms runtime!!
1005 Assert.Fail ("TtlChangeOverflow #4");
1006 } catch (SocketException ex) {
1007 Assert.AreEqual (10022, ex.ErrorCode,
1008 "TtlChangeOverflow #5");
1010 Assert.Fail ("TtlChangeOverflow #6");
1017 [ExpectedException (typeof(ObjectDisposedException))]
1018 public void TtlClosed ()
1020 Socket sock = new Socket (AddressFamily.InterNetwork,
1030 public void UseOnlyOverlappedIODefault ()
1032 Socket sock = new Socket (AddressFamily.InterNetwork,
1036 Assert.AreEqual (false, sock.UseOnlyOverlappedIO, "UseOnlyOverlappedIODefault");
1042 // We need this because the Linux kernel in certain configurations
1043 // will end up rounding up the values passed on to the kernel
1044 // for socket send/receive timeouts.
1046 int Approximate (int target, int value)
1050 if (value > target-10 && value < target+10)
1056 public void UseOnlyOverlappedIOChange ()
1058 Socket sock = new Socket (AddressFamily.InterNetwork,
1062 sock.UseOnlyOverlappedIO = true;
1064 Assert.AreEqual (true, sock.UseOnlyOverlappedIO, "UseOnlyOverlappedIOChange");
1070 /* Should not throw an exception */
1071 public void UseOnlyOverlappedIOClosed ()
1073 Socket sock = new Socket (AddressFamily.InterNetwork,
1079 bool val = sock.UseOnlyOverlappedIO;
1083 public void SendTimeoutDefault ()
1085 Socket sock = new Socket (AddressFamily.InterNetwork,
1089 Assert.AreEqual (0, sock.SendTimeout, "SendTimeoutDefault");
1095 public void SendTimeoutChange ()
1097 Socket sock = new Socket (AddressFamily.InterNetwork,
1101 /* Should be rounded up to 500, according to
1102 * the MSDN docs, but the MS runtime doesn't
1104 sock.SendTimeout = 50;
1105 Assert.AreEqual (50, Approximate (50, sock.SendTimeout), "SendTimeoutChange #1");
1107 sock.SendTimeout = 2000;
1108 Assert.AreEqual (2000, Approximate (2000, sock.SendTimeout), "SendTimeoutChange #2");
1110 sock.SendTimeout = 0;
1111 Assert.AreEqual (0, Approximate (0, sock.SendTimeout), "SendTimeoutChange #3");
1113 /* Should be the same as setting 0 */
1114 sock.SendTimeout = -1;
1115 Assert.AreEqual (0, sock.SendTimeout, "SendTimeoutChange #4");
1117 sock.SendTimeout = 65536;
1118 Assert.AreEqual (65536, Approximate (65536, sock.SendTimeout), "SendTimeoutChange #5");
1121 sock.SendTimeout = -2;
1122 Assert.Fail ("SendTimeoutChange #8");
1123 } catch (ArgumentOutOfRangeException) {
1125 Assert.Fail ("SendTimeoutChange #9");
1132 [ExpectedException (typeof(ObjectDisposedException))]
1133 public void SendTimeoutClosed ()
1135 Socket sock = new Socket (AddressFamily.InterNetwork,
1141 int val = sock.SendTimeout;
1145 public void ReceiveTimeoutDefault ()
1147 Socket sock = new Socket (AddressFamily.InterNetwork,
1151 Assert.AreEqual (0, sock.ReceiveTimeout, "ReceiveTimeoutDefault");
1157 public void ReceiveTimeoutChange ()
1159 Socket sock = new Socket (AddressFamily.InterNetwork,
1163 sock.ReceiveTimeout = 50;
1164 Assert.AreEqual (50, Approximate (50, sock.ReceiveTimeout), "ReceiveTimeoutChange #1");
1166 sock.ReceiveTimeout = 2000;
1167 Assert.AreEqual (2000, Approximate (2000, sock.ReceiveTimeout), "ReceiveTimeoutChange #2");
1169 sock.ReceiveTimeout = 0;
1170 Assert.AreEqual (0, sock.ReceiveTimeout, "ReceiveTimeoutChange #3");
1172 /* Should be the same as setting 0 */
1173 sock.ReceiveTimeout = -1;
1174 Assert.AreEqual (0, sock.ReceiveTimeout, "ReceiveTimeoutChange #4");
1176 sock.ReceiveTimeout = 65536;
1177 Assert.AreEqual (65536, Approximate (65536, sock.ReceiveTimeout), "ReceiveTimeoutChange #5");
1180 sock.ReceiveTimeout = -2;
1181 Assert.Fail ("ReceiveTimeoutChange #8");
1182 } catch (ArgumentOutOfRangeException) {
1184 Assert.Fail ("ReceiveTimeoutChange #9");
1191 [ExpectedException (typeof(ObjectDisposedException))]
1192 public void ReceiveTimeoutClosed ()
1194 Socket sock = new Socket (AddressFamily.InterNetwork,
1200 int val = sock.ReceiveTimeout;
1204 public void NoDelayDefaultTcp ()
1206 Socket sock = new Socket (AddressFamily.InterNetwork,
1210 Assert.AreEqual (false, sock.NoDelay, "NoDelayDefaultTcp");
1216 public void NoDelayChangeTcp ()
1218 Socket sock = new Socket (AddressFamily.InterNetwork,
1222 sock.NoDelay = true;
1224 Assert.AreEqual (true, sock.NoDelay, "NoDelayChangeTcp");
1230 public void NoDelayDefaultUdp ()
1232 Socket sock = new Socket (AddressFamily.InterNetwork,
1237 bool val = sock.NoDelay;
1238 Assert.Fail ("NoDelayDefaultUdp #1");
1239 } catch (SocketException ex) {
1240 Assert.AreEqual (10042, ex.ErrorCode,
1241 "NoDelayDefaultUdp #2");
1243 Assert.Fail ("NoDelayDefaultUdp #3");
1250 public void NoDelayChangeUdp ()
1252 Socket sock = new Socket (AddressFamily.InterNetwork,
1257 sock.NoDelay = true;
1258 Assert.Fail ("NoDelayChangeUdp #1");
1259 } catch (SocketException ex) {
1260 Assert.AreEqual (10042, ex.ErrorCode,
1261 "NoDelayChangeUdp #2");
1263 Assert.Fail ("NoDelayChangeUdp #3");
1270 [ExpectedException (typeof(ObjectDisposedException))]
1271 public void NoDelayClosed ()
1273 Socket sock = new Socket (AddressFamily.InterNetwork,
1279 bool val = sock.NoDelay;
1282 static bool BAAccepted = false;
1283 static Socket BASocket = null;
1284 static ManualResetEvent BACalledBack = new ManualResetEvent (false);
1286 private static void BACallback (IAsyncResult asyncResult)
1288 Socket sock = (Socket)asyncResult.AsyncState;
1290 BASocket = sock.EndAccept (asyncResult);
1293 BACalledBack.Set ();
1297 [ExpectedException (typeof(InvalidOperationException))]
1298 public void BeginAcceptNotBound ()
1300 Socket sock = new Socket (AddressFamily.InterNetwork,
1304 sock.BeginAccept (BACallback, sock);
1310 [ExpectedException (typeof(InvalidOperationException))]
1311 public void BeginAcceptNotListening ()
1313 Socket sock = new Socket (AddressFamily.InterNetwork,
1317 sock.Bind (new IPEndPoint (IPAddress.Any, 1236));
1319 sock.BeginAccept (BACallback, sock);
1325 public void BeginAccept ()
1327 Socket sock = new Socket (AddressFamily.InterNetwork,
1330 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
1336 BACalledBack.Reset ();
1338 sock.BeginAccept (BACallback, sock);
1340 Socket conn = new Socket (AddressFamily.InterNetwork,
1346 if (BACalledBack.WaitOne (2000, false) == false) {
1347 Assert.Fail ("BeginAccept wait timed out");
1350 Assert.AreEqual (true, BAAccepted, "BeginAccept #1");
1351 Assert.AreEqual (true, BASocket.Connected, "BeginAccept #2");
1352 Assert.AreEqual (false, sock.Connected, "BeginAccept #3");
1353 Assert.AreEqual (true, conn.Connected, "BeginAccept #4");
1361 [ExpectedException (typeof(ObjectDisposedException))]
1362 public void BeginAcceptClosed ()
1364 Socket sock = new Socket (AddressFamily.InterNetwork,
1370 sock.BeginAccept (BACallback, sock);
1373 static bool BADAccepted = false;
1374 static Socket BADSocket = null;
1375 static byte[] BADBytes;
1376 static int BADByteCount;
1377 static ManualResetEvent BADCalledBack = new ManualResetEvent (false);
1379 private static void BADCallback (IAsyncResult asyncResult)
1381 Socket sock = (Socket)asyncResult.AsyncState;
1383 BADSocket = sock.EndAccept (out BADBytes,
1388 BADCalledBack.Set ();
1392 public void BeginAcceptData ()
1394 Socket sock = new Socket (AddressFamily.InterNetwork,
1397 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
1403 BADCalledBack.Reset ();
1405 sock.BeginAccept (256, BADCallback, sock);
1407 Socket conn = new Socket (AddressFamily.InterNetwork,
1410 byte[] send_bytes = new byte[] {10, 11, 12, 13};
1413 conn.Send (send_bytes);
1415 if (BADCalledBack.WaitOne (2000, false) == false) {
1416 Assert.Fail ("BeginAcceptData wait timed out");
1419 Assert.AreEqual (true, BADAccepted, "BeginAcceptData #1");
1420 Assert.AreEqual (true, BADSocket.Connected, "BeginAcceptData #2");
1421 Assert.AreEqual (false, sock.Connected, "BeginAcceptData #3");
1422 Assert.AreEqual (true, conn.Connected, "BeginAcceptData #4");
1423 Assert.AreEqual (send_bytes.Length, BADByteCount, "BeginAcceptData #5");
1425 /* The MS runtime gives the returned data in a
1426 * much bigger array. TODO: investigate
1427 * whether it the size correlates to the first
1428 * parameter in BeginAccept()
1430 Assert.IsFalse (BADBytes.Length == send_bytes.Length,
1431 "BeginAcceptData #6");
1433 for(int i = 0; i < send_bytes.Length; i++) {
1434 Assert.AreEqual (send_bytes[i], BADBytes[i], "BeginAcceptData #" + (i+7).ToString ());
1443 [ExpectedException (typeof(ObjectDisposedException))]
1444 public void BeginAcceptDataClosed ()
1446 Socket sock = new Socket (AddressFamily.InterNetwork,
1452 sock.BeginAccept (256, BADCallback, sock);
1456 public void BeginAcceptSocketUdp ()
1458 Socket sock = new Socket (AddressFamily.InterNetwork,
1461 Socket acc = new Socket (AddressFamily.InterNetwork,
1465 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
1472 sock.BeginAccept (acc, 256, BADCallback, sock);
1473 Assert.Fail ("BeginAcceptSocketUdp #1");
1474 } catch (SocketException ex) {
1475 Assert.AreEqual (10022, ex.ErrorCode, "BeginAcceptSocketUdp #2");
1477 Assert.Fail ("BeginAcceptSocketUdp #3");
1485 public void BeginAcceptSocketBound ()
1487 Socket sock = new Socket (AddressFamily.InterNetwork,
1490 Socket acc = new Socket (AddressFamily.InterNetwork,
1494 IPEndPoint ep1 = new IPEndPoint (IPAddress.Loopback,
1497 IPEndPoint ep2 = new IPEndPoint (IPAddress.Loopback,
1506 sock.BeginAccept (acc, 256, BADCallback, sock);
1507 Assert.Fail ("BeginAcceptSocketBound #1");
1508 } catch (InvalidOperationException) {
1510 Assert.Fail ("BeginAcceptSocketBound #2");
1518 public void BeginAcceptSocket ()
1520 Socket sock = new Socket (AddressFamily.InterNetwork,
1523 Socket acc = new Socket (AddressFamily.InterNetwork,
1527 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
1533 BADCalledBack.Reset ();
1535 sock.BeginAccept (acc, 256, BADCallback, sock);
1537 Socket conn = new Socket (AddressFamily.InterNetwork,
1540 byte[] send_bytes = new byte[] {10, 11, 12, 13};
1543 conn.Send (send_bytes);
1545 if (BADCalledBack.WaitOne (2000, false) == false) {
1546 Assert.Fail ("BeginAcceptSocket wait timed out");
1549 Assert.AreEqual (true, BADAccepted, "BeginAcceptSocket #1");
1550 Assert.AreEqual (true, BADSocket.Connected, "BeginAcceptSocket #2");
1551 Assert.AreEqual (false, sock.Connected, "BeginAcceptSocket #3");
1552 Assert.AreEqual (true, conn.Connected, "BeginAcceptSocket #4");
1553 Assert.AreEqual (send_bytes.Length, BADByteCount, "BeginAcceptSocket #5");
1554 Assert.AreEqual (AddressFamily.InterNetwork, acc.AddressFamily, "BeginAcceptSocket #6");
1555 Assert.AreEqual (SocketType.Stream, acc.SocketType, "BeginAcceptSocket #7");
1556 Assert.AreEqual (ProtocolType.Tcp, acc.ProtocolType, "BeginAcceptSocket #8");
1557 Assert.AreEqual (conn.LocalEndPoint, acc.RemoteEndPoint, "BeginAcceptSocket #9");
1559 /* The MS runtime gives the returned data in a
1560 * much bigger array. TODO: investigate
1561 * whether it the size correlates to the first
1562 * parameter in BeginAccept()
1564 Assert.IsFalse (BADBytes.Length == send_bytes.Length,
1565 "BeginAcceptSocket #10");
1567 for(int i = 0; i < send_bytes.Length; i++) {
1568 Assert.AreEqual (send_bytes[i], BADBytes[i], "BeginAcceptSocket #" + (i+11).ToString ());
1578 public void BeginAcceptSocketClosed ()
1580 Socket sock = new Socket (AddressFamily.InterNetwork,
1583 Socket acc = new Socket (AddressFamily.InterNetwork,
1590 sock.BeginAccept (acc, 256, BADCallback, null);
1591 Assert.Fail ("BeginAcceptSocketClosed #1");
1592 } catch (ObjectDisposedException) {
1594 Assert.Fail ("BeginAcceptSocketClosed #2");
1601 public void BeginAcceptSocketAccClosed ()
1603 Socket sock = new Socket (AddressFamily.InterNetwork,
1606 Socket acc = new Socket (AddressFamily.InterNetwork,
1609 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
1617 BADCalledBack.Reset ();
1620 sock.BeginAccept (acc, 256, BADCallback, null);
1621 Assert.Fail ("BeginAcceptSocketAccClosed #1");
1622 } catch (ObjectDisposedException) {
1624 Assert.Fail ("BeginAcceptSocketAccClosed #2");
1630 static bool BCConnected = false;
1631 static ManualResetEvent BCCalledBack = new ManualResetEvent (false);
1633 private static void BCCallback (IAsyncResult asyncResult)
1635 Socket sock = (Socket)asyncResult.AsyncState;
1638 sock.EndConnect (asyncResult);
1639 } catch (Exception e) {
1640 Console.WriteLine ("BCCallback exception:");
1641 Console.WriteLine (e);
1648 BCCalledBack.Set ();
1652 public void BeginConnectAddressPort ()
1654 Socket sock = new Socket (AddressFamily.InterNetwork,
1657 Socket listen = new Socket (AddressFamily.InterNetwork,
1660 IPAddress ip = IPAddress.Loopback;
1661 IPEndPoint ep = new IPEndPoint (ip, 1244);
1666 BCCalledBack.Reset ();
1668 BCConnected = false;
1670 sock.BeginConnect (ip, 1244, BCCallback, sock);
1672 if (BCCalledBack.WaitOne (2000, false) == false) {
1673 Assert.Fail ("BeginConnectAddressPort wait timed out");
1676 Assert.AreEqual (true, BCConnected, "BeginConnectAddressPort #1");
1683 public void BeginConnectAddressPortNull ()
1685 Socket sock = new Socket (AddressFamily.InterNetwork,
1688 IPAddress ip = null;
1691 sock.BeginConnect (ip, 1244, BCCallback,
1693 Assert.Fail ("BeginConnectAddressPortNull #1");
1694 } catch (ArgumentNullException) {
1696 Assert.Fail ("BeginConnectAddressPortNull #2");
1703 public void BeginConnectAddressPortListen ()
1705 Socket sock = new Socket (AddressFamily.InterNetwork,
1708 IPAddress ip = IPAddress.Loopback;
1709 IPEndPoint ep = new IPEndPoint (ip, 1245);
1715 sock.BeginConnect (ip, 1245, BCCallback, sock);
1716 Assert.Fail ("BeginConnectAddressPortListen #1");
1717 } catch (InvalidOperationException) {
1719 Assert.Fail ("BeginConnectAddressPortListen #2");
1726 [ExpectedException (typeof(ObjectDisposedException))]
1727 public void BeginConnectAddressPortClosed ()
1729 Socket sock = new Socket (AddressFamily.InterNetwork,
1732 IPAddress ip = IPAddress.Loopback;
1736 sock.BeginConnect (ip, 1244, BCCallback, sock);
1740 [Category ("NotOnMac")]
1742 * This is not a Mono bug.
1744 * By default, only 127.0.0.1 is enabled and you must explicitly
1745 * enable additional addresses using 'sudo ifconfig lo0 alias 127.0.0.1'.
1747 * I tested this on Mac OS 10.7.4; a 'ping 127.0.0.2' does not work
1748 * until I add that alias.
1751 public void BeginConnectMultiple ()
1753 Socket sock = new Socket (AddressFamily.InterNetwork,
1756 Socket listen = new Socket (AddressFamily.InterNetwork,
1759 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
1761 IPAddress[] ips = new IPAddress[4];
1763 ips[0] = IPAddress.Parse ("127.0.0.4");
1764 ips[1] = IPAddress.Parse ("127.0.0.3");
1765 ips[2] = IPAddress.Parse ("127.0.0.2");
1766 ips[3] = IPAddress.Parse ("127.0.0.1");
1771 BCCalledBack.Reset ();
1773 BCConnected = false;
1775 sock.BeginConnect (ips, 1246, BCCallback, sock);
1777 /* Longer wait here, because the ms runtime
1778 * takes a lot longer to not connect
1781 if (BCCalledBack.WaitOne (30000, false) == false) {
1782 Assert.Fail ("BeginConnectMultiple wait failed");
1786 Assert.IsTrue (BCCalledBack.WaitOne (30000), "#0");
1788 Assert.AreEqual (true, BCConnected, "BeginConnectMultiple #1");
1789 Assert.AreEqual (AddressFamily.InterNetwork, sock.RemoteEndPoint.AddressFamily, "BeginConnectMultiple #2");
1790 IPEndPoint remep = (IPEndPoint)sock.RemoteEndPoint;
1792 Assert.AreEqual (IPAddress.Loopback, remep.Address, "BeginConnectMultiple #2");
1799 public void BeginConnectMultiple2 ()
1801 Socket sock = new Socket (AddressFamily.InterNetwork,
1804 Socket listen = new Socket (AddressFamily.InterNetwork,
1808 // Need at least two addresses.
1809 var ips = Dns.GetHostAddresses (string.Empty);
1811 Assert.Ignore ("This test needs at least two IP addresses.");
1813 var allIps = new IPAddress [ips.Length + 1];
1814 allIps [0] = IPAddress.Loopback;
1815 ips.CopyTo (allIps, 1);
1818 * Only bind to the loopback interface, so all the non-loopback
1819 * IP addresses will fail. BeginConnect()/EndConnect() should
1820 * succeed it it can connect to at least one of the requested
1823 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 1246);
1828 BCCalledBack.Reset ();
1830 BCConnected = false;
1832 sock.BeginConnect (allIps, 1246, BCCallback, sock);
1834 /* Longer wait here, because the ms runtime
1835 * takes a lot longer to not connect
1837 if (BCCalledBack.WaitOne (10000, false) == false) {
1838 Assert.Fail ("BeginConnectMultiple2 wait failed");
1841 Assert.AreEqual (true, BCConnected, "BeginConnectMultiple2 #1");
1842 Assert.AreEqual (AddressFamily.InterNetwork, sock.RemoteEndPoint.AddressFamily, "BeginConnectMultiple2 #2");
1843 IPEndPoint remep = (IPEndPoint)sock.RemoteEndPoint;
1845 Assert.AreEqual (IPAddress.Loopback, remep.Address, "BeginConnectMultiple2 #2");
1853 public void BeginConnectMultipleNull ()
1855 Socket sock = new Socket (AddressFamily.InterNetwork,
1858 IPAddress[] ips = null;
1861 sock.BeginConnect (ips, 1246, BCCallback,
1863 Assert.Fail ("BeginConnectMultipleNull #1");
1864 } catch (ArgumentNullException) {
1866 Assert.Fail ("BeginConnectMultipleNull #2");
1873 public void BeginConnectMultipleListen ()
1875 Socket sock = new Socket (AddressFamily.InterNetwork,
1878 IPAddress[] ips = new IPAddress[4];
1879 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
1882 ips[0] = IPAddress.Parse ("127.0.0.4");
1883 ips[1] = IPAddress.Parse ("127.0.0.3");
1884 ips[2] = IPAddress.Parse ("127.0.0.2");
1885 ips[3] = IPAddress.Parse ("127.0.0.1");
1891 sock.BeginConnect (ips, 1247, BCCallback,
1893 Assert.Fail ("BeginConnectMultipleListen #1");
1894 } catch (InvalidOperationException) {
1896 Assert.Fail ("BeginConnectMultipleListen #2");
1903 [ExpectedException (typeof(ObjectDisposedException))]
1904 public void BeginConnectMultipleClosed ()
1906 Socket sock = new Socket (AddressFamily.InterNetwork,
1909 IPAddress[] ips = new IPAddress[4];
1911 ips[0] = IPAddress.Parse ("127.0.0.4");
1912 ips[1] = IPAddress.Parse ("127.0.0.3");
1913 ips[2] = IPAddress.Parse ("127.0.0.2");
1914 ips[3] = IPAddress.Parse ("127.0.0.1");
1918 sock.BeginConnect (ips, 1247, BCCallback, sock);
1922 public void BeginConnectHostPortNull ()
1924 Socket sock = new Socket (AddressFamily.InterNetwork,
1929 sock.BeginConnect ((string)null, 0,
1931 Assert.Fail ("BeginConnectHostPort #1");
1932 } catch (ArgumentNullException) {
1934 Assert.Fail ("BeginConnectHostPort #2");
1941 public void BeginConnectHostPortListen ()
1943 Socket sock = new Socket (AddressFamily.InterNetwork,
1946 IPAddress ip = IPAddress.Loopback;
1947 IPEndPoint ep = new IPEndPoint (ip, 1248);
1953 sock.BeginConnect ("localhost", 1248,
1955 Assert.Fail ("BeginConnectHostPortListen #1");
1956 } catch (InvalidOperationException) {
1958 Assert.Fail ("BeginConnectHostPortListen #2");
1965 [Category ("NotWorking")] // Need to pick a non-IP AddressFamily that "works" on both mono and ms, this one only works on ms
1966 public void BeginConnectHostPortNotIP ()
1968 Socket sock = new Socket (AddressFamily.NetBios,
1969 SocketType.Seqpacket,
1970 ProtocolType.Unspecified);
1973 sock.BeginConnect ("localhost", 0, BCCallback,
1975 Assert.Fail ("BeginConnectHostPortNotIP #1");
1976 } catch (NotSupportedException) {
1978 Assert.Fail ("BeginConnectHostPortNotIP #2");
1985 [ExpectedException (typeof(ObjectDisposedException))]
1986 public void BeginConnectHostPortClosed ()
1988 Socket sock = new Socket (AddressFamily.InterNetwork,
1994 sock.BeginConnect ("localhost", 0, BCCallback, sock);
1997 static bool BDDisconnected = false;
1998 static ManualResetEvent BDCalledBack = new ManualResetEvent (false);
2000 private static void BDCallback (IAsyncResult asyncResult)
2002 Socket sock = (Socket)asyncResult.AsyncState;
2004 sock.EndDisconnect (asyncResult);
2005 BDDisconnected = true;
2007 BDCalledBack.Set ();
2011 [Category ("NotDotNet")] // "Needs XP or later"
2012 public void BeginDisconnect ()
2014 Socket sock = new Socket (AddressFamily.InterNetwork,
2017 Socket listen = new Socket (AddressFamily.InterNetwork,
2020 IPAddress ip = IPAddress.Loopback;
2021 IPEndPoint ep = new IPEndPoint (ip, 1254);
2026 sock.Connect (ip, 1254);
2028 Assert.AreEqual (true, sock.Connected, "BeginDisconnect #1");
2030 sock.Shutdown (SocketShutdown.Both);
2032 BDCalledBack.Reset ();
2033 BDDisconnected = false;
2035 sock.BeginDisconnect (false, BDCallback, sock);
2037 if (BDCalledBack.WaitOne (2000, false) == false) {
2038 Assert.Fail ("BeginDisconnect wait timed out");
2041 Assert.AreEqual (true, BDDisconnected, "BeginDisconnect #2");
2042 Assert.AreEqual (false, sock.Connected, "BeginDisconnect #3");
2049 public void BeginReceiveSocketError ()
2054 public void BeginReceiveGeneric ()
2059 public void BeginReceiveGenericSocketError ()
2063 private static void BSCallback (IAsyncResult asyncResult)
2065 Socket sock = (Socket)asyncResult.AsyncState;
2067 sock.EndSend (asyncResult);
2071 public void BeginSendNotConnected ()
2073 Socket sock = new Socket (AddressFamily.InterNetwork,
2077 byte[] send_bytes = new byte[] {10, 11, 12, 13};
2080 sock.BeginSend (send_bytes, 0,
2082 SocketFlags.None, BSCallback,
2084 Assert.Fail ("BeginSendNotConnected #1");
2085 } catch (SocketException ex) {
2086 Assert.AreEqual (10057, ex.ErrorCode, "BeginSendNotConnected #2");
2088 Assert.Fail ("BeginSendNotConnected #3");
2095 public void BeginSendSocketError ()
2100 public void BeginSendGeneric ()
2105 public void BeginSendGenericSocketError ()
2110 public void BindTwice ()
2112 Socket sock = new Socket (AddressFamily.InterNetwork,
2115 IPEndPoint ep1 = new IPEndPoint (IPAddress.Loopback,
2117 IPEndPoint ep2 = new IPEndPoint (IPAddress.Loopback,
2124 Assert.Fail ("BindTwice #1");
2125 } catch (SocketException ex) {
2126 Assert.AreEqual (10022, ex.ErrorCode, "BindTwice #2");
2128 Assert.Fail ("BindTwice #3");
2135 public void Close ()
2137 Socket sock = new Socket (AddressFamily.InterNetwork,
2140 Socket listen = new Socket (AddressFamily.InterNetwork,
2143 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
2151 Assert.AreEqual (true, sock.Connected, "Close #1");
2155 Thread.Sleep (3000);
2157 Assert.AreEqual (false, sock.Connected, "Close #2");
2163 public void ConnectAddressPort ()
2165 Socket sock = new Socket (AddressFamily.InterNetwork,
2168 Socket listen = new Socket (AddressFamily.InterNetwork,
2171 IPAddress ip = IPAddress.Loopback;
2172 IPEndPoint ep = new IPEndPoint (ip, 1249);
2177 sock.Connect (ip, 1249);
2179 Assert.AreEqual (true, sock.Connected, "ConnectAddressPort #1");
2186 public void ConnectAddressPortNull ()
2188 Socket sock = new Socket (AddressFamily.InterNetwork,
2191 IPAddress ip = null;
2194 sock.Connect (ip, 1249);
2195 Assert.Fail ("ConnectAddressPortNull #1");
2196 } catch (ArgumentNullException) {
2198 Assert.Fail ("ConnectAddressPortNull #2");
2205 public void ConnectAddressPortListen ()
2207 Socket sock = new Socket (AddressFamily.InterNetwork,
2210 IPAddress ip = IPAddress.Loopback;
2211 IPEndPoint ep = new IPEndPoint (ip, 1250);
2217 sock.Connect (ip, 1250);
2218 Assert.Fail ("ConnectAddressPortListen #1");
2219 } catch (InvalidOperationException) {
2221 Assert.Fail ("ConnectAddressPortListen #2");
2228 [ExpectedException (typeof(ObjectDisposedException))]
2229 public void ConnectAddressPortClosed ()
2231 Socket sock = new Socket (AddressFamily.InterNetwork,
2234 IPAddress ip = IPAddress.Loopback;
2238 sock.Connect (ip, 1250);
2242 [Category ("NotOnMac")] // MacOSX trashes the fd after the failed connect attempt to 127.0.0.4
2244 * This is not a Mono bug.
2246 * By default, only 127.0.0.1 is enabled and you must explicitly
2247 * enable additional addresses using 'sudo ifconfig lo0 alias 127.0.0.1'.
2249 * I tested this on Mac OS 10.7.4; a 'ping 127.0.0.2' does not work
2250 * until I add that alias.
2252 * However, after doing so, Mac OS treats these as separate addresses, ie. attempting
2253 * to connect to 127.0.0.4 yields a connection refused.
2255 * When using Connect(), the .NET runtime also throws an exception if connecting to
2256 * any of the IP addresses fails. This is different with BeginConnect()/EndConnect()
2257 * which succeeds when it can connect to at least one of the addresses.
2260 public void ConnectMultiple ()
2262 Socket sock = new Socket (AddressFamily.InterNetwork,
2265 Socket listen = new Socket (AddressFamily.InterNetwork,
2268 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
2270 IPAddress[] ips = new IPAddress[4];
2272 ips[0] = IPAddress.Parse ("127.0.0.4");
2273 ips[1] = IPAddress.Parse ("127.0.0.3");
2274 ips[2] = IPAddress.Parse ("127.0.0.2");
2275 ips[3] = IPAddress.Parse ("127.0.0.1");
2280 sock.Connect (ips, 1251);
2282 Assert.AreEqual (true, sock.Connected, "ConnectMultiple #1");
2283 Assert.AreEqual (AddressFamily.InterNetwork, sock.RemoteEndPoint.AddressFamily, "ConnectMultiple #2");
2284 IPEndPoint remep = (IPEndPoint)sock.RemoteEndPoint;
2286 Assert.AreEqual (IPAddress.Loopback, remep.Address, "ConnectMultiple #2");
2293 public void ConnectMultiple2 ()
2295 Socket sock = new Socket (AddressFamily.InterNetwork,
2298 Socket listen = new Socket (AddressFamily.InterNetwork,
2302 // Need at least two addresses.
2303 var ips = Dns.GetHostAddresses (string.Empty);
2305 Assert.Ignore ("This test needs at least two IP addresses.");
2307 var allIps = new IPAddress [ips.Length + 1];
2308 allIps [0] = IPAddress.Loopback;
2309 ips.CopyTo (allIps, 1);
2312 * Bind to IPAddress.Any; Connect() will fail unless it can
2313 * connect to all the addresses in allIps.
2315 IPEndPoint ep = new IPEndPoint (IPAddress.Any, 1251);
2320 sock.Connect (allIps, 1251);
2322 Assert.AreEqual (true, sock.Connected, "ConnectMultiple2 #1");
2323 Assert.AreEqual (AddressFamily.InterNetwork, sock.RemoteEndPoint.AddressFamily, "ConnectMultiple2 #2");
2324 IPEndPoint remep = (IPEndPoint)sock.RemoteEndPoint;
2326 Assert.AreEqual (IPAddress.Loopback, remep.Address, "ConnectMultiple2 #3");
2333 public void ConnectMultipleNull ()
2335 Socket sock = new Socket (AddressFamily.InterNetwork,
2338 IPAddress[] ips = null;
2341 sock.Connect (ips, 1251);
2342 Assert.Fail ("ConnectMultipleNull #1");
2343 } catch (ArgumentNullException) {
2345 Assert.Fail ("ConnectMultipleNull #2");
2352 public void ConnectMultipleListen ()
2354 Socket sock = new Socket (AddressFamily.InterNetwork,
2357 IPAddress[] ips = new IPAddress[4];
2358 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
2361 ips[0] = IPAddress.Parse ("127.0.0.4");
2362 ips[1] = IPAddress.Parse ("127.0.0.3");
2363 ips[2] = IPAddress.Parse ("127.0.0.2");
2364 ips[3] = IPAddress.Parse ("127.0.0.1");
2370 sock.Connect (ips, 1252);
2371 Assert.Fail ("ConnectMultipleListen #1");
2372 } catch (InvalidOperationException) {
2374 Assert.Fail ("ConnectMultipleListen #2");
2381 [ExpectedException (typeof(ObjectDisposedException))]
2382 public void ConnectMultipleClosed ()
2384 Socket sock = new Socket (AddressFamily.InterNetwork,
2387 IPAddress[] ips = new IPAddress[4];
2389 ips[0] = IPAddress.Parse ("127.0.0.4");
2390 ips[1] = IPAddress.Parse ("127.0.0.3");
2391 ips[2] = IPAddress.Parse ("127.0.0.2");
2392 ips[3] = IPAddress.Parse ("127.0.0.1");
2396 sock.Connect (ips, 1252);
2400 public void ConnectHostPortNull ()
2402 Socket sock = new Socket (AddressFamily.InterNetwork,
2407 sock.Connect ((string)null, 0);
2408 Assert.Fail ("ConnectHostPort #1");
2409 } catch (ArgumentNullException) {
2411 Assert.Fail ("ConnectHostPort #2");
2418 public void ConnectHostPortListen ()
2420 Socket sock = new Socket (AddressFamily.InterNetwork,
2423 IPAddress ip = IPAddress.Loopback;
2424 IPEndPoint ep = new IPEndPoint (ip, 1253);
2430 sock.Connect ("localhost", 1253);
2431 Assert.Fail ("ConnectHostPortListen #1");
2432 } catch (InvalidOperationException) {
2434 Assert.Fail ("ConnectHostPortListen #2");
2441 [Category ("NotWorking")] // Need to pick a non-IP AddressFamily that "works" on both mono and ms, this one only works on ms
2442 public void ConnectHostPortNotIP ()
2444 Socket sock = new Socket (AddressFamily.NetBios,
2445 SocketType.Seqpacket,
2446 ProtocolType.Unspecified);
2449 sock.Connect ("localhost", 0);
2450 Assert.Fail ("ConnectHostPortNotIP #1");
2451 } catch (NotSupportedException) {
2453 Assert.Fail ("ConnectHostPortNotIP #2");
2460 [ExpectedException (typeof(ObjectDisposedException))]
2461 public void ConnectHostPortClosed ()
2463 Socket sock = new Socket (AddressFamily.InterNetwork,
2469 sock.Connect ("localhost", 0);
2473 [Category ("NotDotNet")] // "Needs XP or later"
2474 public void Disconnect ()
2476 Socket sock = new Socket (AddressFamily.InterNetwork,
2479 Socket listen = new Socket (AddressFamily.InterNetwork,
2482 IPAddress ip = IPAddress.Loopback;
2483 IPEndPoint ep = new IPEndPoint (ip, 1255);
2488 sock.Connect (ip, 1255);
2490 Assert.AreEqual (true, sock.Connected, "Disconnect #1");
2492 sock.Shutdown (SocketShutdown.Both);
2494 sock.Disconnect (false);
2496 Assert.AreEqual (false, sock.Connected, "BeginDisconnect #3");
2503 public void DuplicateAndClose ()
2508 public void IOControl ()
2513 public void TestDefaultsDualMode ()
2515 using (var socket = new Socket (AddressFamily.InterNetworkV6, SocketType.Stream, ProtocolType.Tcp)){
2516 Assert.IsTrue (socket.DualMode, "In Mono, DualMode must be true when constructing InterNetworkV6 sockets");
2519 using (var socket = new Socket (SocketType.Stream, ProtocolType.Tcp)){
2520 Assert.AreEqual (AddressFamily.InterNetworkV6, socket.AddressFamily, "When creating sockets of type stream/tcp, the address family should be InterNetworkV6");
2521 Assert.IsTrue (socket.DualMode, "In Mono, DualMode must be true when constructing InterNetworkV6 sockets");
2523 socket.DualMode = false;
2525 Assert.IsFalse (socket.DualMode, "Setting of DualSocket should turn DualSockets off");
2531 public void ReceiveGeneric ()
2535 IPEndPoint endpoint = new IPEndPoint(IPAddress.Loopback, 1258);
2537 Socket listensock = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
2538 listensock.Bind (endpoint);
2539 listensock.Listen(1);
2541 Socket sendsock = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
2542 sendsock.Connect(endpoint);
2544 Socket clientsock = listensock.Accept();
2546 byte[] sendbuf = new byte[256];
2548 for(i = 0; i < 256; i++) {
2549 sendbuf[i] = (byte)i;
2551 for (i = 4; i < 6; i++) {
2552 Assert.AreEqual (sendbuf[i], (byte)i,
2553 "#1/" + i.ToString());
2557 sendsock.Send (sendbuf, 0, 256, SocketFlags.None,
2561 byte[] recvbuf = new byte[256];
2562 List<ArraySegment<byte>> recvbuflist = new List<ArraySegment<byte>>(2);
2563 recvbuflist.Add(new ArraySegment<byte>(recvbuf, 4, 2));
2564 recvbuflist.Add(new ArraySegment<byte>(recvbuf, 20, 230));
2566 clientsock.Receive (recvbuflist);
2568 /* recvbuf should now hold the first 2 bytes
2569 * of sendbuf from pos 4, and the next 230
2570 * bytes of sendbuf from pos 20
2573 for (i = 0; i < 2; i++) {
2574 Assert.AreEqual (sendbuf[i], recvbuf[i + 4],
2575 "#2/" + i.ToString());
2577 for (i = 2; i < 232; i++) {
2578 Assert.AreEqual (sendbuf[i], recvbuf[i + 18],
2579 "#2/" + i.ToString());
2583 clientsock.Close ();
2584 listensock.Close ();
2588 public void SendGeneric ()
2592 IPEndPoint endpoint = new IPEndPoint(IPAddress.Loopback, 1259);
2594 Socket listensock = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
2595 listensock.Bind (endpoint);
2596 listensock.Listen(1);
2598 Socket sendsock = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
2599 sendsock.Connect(endpoint);
2601 Socket clientsock = listensock.Accept();
2603 byte[] sendbuf = new byte[256];
2604 List<ArraySegment<byte>> sendbuflist = new List<ArraySegment<byte>>(2);
2606 sendbuflist.Add(new ArraySegment<byte>(sendbuf, 4, 2));
2607 sendbuflist.Add(new ArraySegment<byte>(sendbuf, 20, 230));
2609 for(i = 0; i < 256; i++) {
2610 sendbuf[i] = (byte)i;
2612 for (i = 4; i < 6; i++) {
2613 Assert.AreEqual (sendbuf[i], (byte)i,
2614 "#1/" + i.ToString());
2618 sendsock.Send (sendbuflist, SocketFlags.None, out err);
2621 byte[] recvbuf = new byte[256];
2623 clientsock.Receive (recvbuf);
2625 /* The first 2 bytes of recvbuf should now
2626 * hold 2 bytes of sendbuf from pos 4, and the
2627 * next 230 bytes of recvbuf should be sendbuf
2631 for (i = 0; i < 2; i++) {
2632 Assert.AreEqual (recvbuf[i], sendbuf[i + 4],
2633 "#2/" + i.ToString());
2635 for (i = 2; i < 232; i++) {
2636 Assert.AreEqual (recvbuf[i], sendbuf[i + 18],
2637 "#2/" + i.ToString());
2641 clientsock.Close ();
2642 listensock.Close ();
2646 public void ListenNotBound ()
2648 Socket sock = new Socket (AddressFamily.InterNetwork,
2654 Assert.Fail ("ListenNotBound #1");
2655 } catch (SocketException ex) {
2656 Assert.AreEqual (10022, ex.ErrorCode, "ListenNotBound #2");
2658 Assert.Fail ("ListenNotBound #3");
2664 static Socket CWRSocket;
2665 static bool CWRReceiving = true;
2666 static ManualResetEvent CWRReady = new ManualResetEvent (false);
2668 private static void CWRReceiveThread ()
2670 byte[] buf = new byte[256];
2673 CWRSocket.Receive (buf);
2674 } catch (SocketException) {
2675 CWRReceiving = false;
2682 public void CloseWhileReceiving ()
2684 CWRSocket = new Socket (AddressFamily.InterNetwork,
2687 CWRSocket.Bind (new IPEndPoint (IPAddress.Loopback,
2690 Thread recv_thread = new Thread (new ThreadStart (CWRReceiveThread));
2692 recv_thread.Start ();
2693 Thread.Sleep (250); /* Wait for the thread to be already receiving */
2696 if (CWRReady.WaitOne (1000, false) == false) {
2697 Assert.Fail ("CloseWhileReceiving wait timed out");
2700 Assert.IsFalse (CWRReceiving);
2703 static bool RRCLastRead = false;
2704 static ManualResetEvent RRCReady = new ManualResetEvent (false);
2706 private static void RRCClientThread ()
2708 byte[] bytes = new byte[8];
2711 Socket sock = new Socket (AddressFamily.InterNetwork,
2714 sock.Connect (new IPEndPoint (IPAddress.Loopback,
2717 NetworkStream stream = new NetworkStream (sock);
2719 readbyte = stream.ReadByte ();
2720 Assert.AreEqual (0, readbyte, "ReceiveRemoteClosed #1");
2722 stream.Read (bytes, 0, 0);
2724 readbyte = stream.ReadByte ();
2725 Assert.AreEqual (0, readbyte, "ReceiveRemoteClosed #2");
2727 stream.Read (bytes, 0, 0);
2729 readbyte = stream.ReadByte ();
2730 Assert.AreEqual (-1, readbyte, "ReceiveRemoteClosed #3");
2738 [Test] // Receive (Byte [])
2739 public void Receive1_Buffer_Null ()
2741 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
2745 s.Receive ((byte []) null);
2747 } catch (ArgumentNullException ex) {
2748 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
2749 Assert.IsNull (ex.InnerException, "#3");
2750 Assert.IsNotNull (ex.Message, "#4");
2751 Assert.AreEqual ("buffer", ex.ParamName, "#5");
2757 [Test] // Receive (Byte [])
2758 public void Receive1_Socket_Closed ()
2760 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
2765 s.Receive ((byte []) null);
2767 } catch (ObjectDisposedException ex) {
2768 // Cannot access a disposed object
2769 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
2770 Assert.IsNull (ex.InnerException, "#3");
2771 Assert.IsNotNull (ex.Message, "#4");
2772 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
2776 [Test] // Receive (Byte [], SocketFlags)
2777 public void Receive2_Buffer_Null ()
2779 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
2783 s.Receive ((byte []) null, (SocketFlags) 666);
2785 } catch (ArgumentNullException ex) {
2786 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
2787 Assert.IsNull (ex.InnerException, "#3");
2788 Assert.IsNotNull (ex.Message, "#4");
2789 Assert.AreEqual ("buffer", ex.ParamName, "#5");
2795 [Test] // Receive (Byte [], SocketFlags)
2796 public void Receive2_Socket_Closed ()
2798 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
2803 s.Receive ((byte []) null, (SocketFlags) 666);
2805 } catch (ObjectDisposedException ex) {
2806 // Cannot access a disposed object
2807 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
2808 Assert.IsNull (ex.InnerException, "#3");
2809 Assert.IsNotNull (ex.Message, "#4");
2810 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
2814 [Test] // Receive (Byte [], Int32, SocketFlags)
2815 public void Receive3_Buffer_Null ()
2817 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
2821 s.Receive ((byte []) null, 0, (SocketFlags) 666);
2823 } catch (ArgumentNullException ex) {
2824 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
2825 Assert.IsNull (ex.InnerException, "#3");
2826 Assert.IsNotNull (ex.Message, "#4");
2827 Assert.AreEqual ("buffer", ex.ParamName, "#5");
2833 [Test] // Receive (Byte [], Int32, SocketFlags)
2834 public void Receive3_Socket_Closed ()
2836 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
2841 s.Receive ((byte []) null, 0, (SocketFlags) 666);
2843 } catch (ObjectDisposedException ex) {
2844 // Cannot access a disposed object
2845 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
2846 Assert.IsNull (ex.InnerException, "#3");
2847 Assert.IsNotNull (ex.Message, "#4");
2848 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
2852 [Test] // Receive (Byte [], Int32, Int32, SocketFlags)
2853 public void Receive4_Buffer_Null ()
2855 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
2859 s.Receive ((byte []) null, 0, 0, (SocketFlags) 666);
2861 } catch (ArgumentNullException ex) {
2862 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
2863 Assert.IsNull (ex.InnerException, "#3");
2864 Assert.IsNotNull (ex.Message, "#4");
2865 Assert.AreEqual ("buffer", ex.ParamName, "#5");
2871 [Test] // Receive (Byte [], Int32, Int32, SocketFlags)
2872 public void Receive4_Socket_Closed ()
2874 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
2879 s.Receive ((byte []) null, 0, 0, (SocketFlags) 666);
2881 } catch (ObjectDisposedException ex) {
2882 // Cannot access a disposed object
2883 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
2884 Assert.IsNull (ex.InnerException, "#3");
2885 Assert.IsNotNull (ex.Message, "#4");
2886 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
2890 [Test] // Receive (Byte [], Int32, Int32, SocketFlags, out SocketError)
2891 public void Receive5_Buffer_Null ()
2893 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
2898 s.Receive ((byte []) null, 0, 0, SocketFlags.None, out error);
2900 } catch (ArgumentNullException ex) {
2901 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
2902 Assert.IsNull (ex.InnerException, "#3");
2903 Assert.IsNotNull (ex.Message, "#4");
2904 Assert.AreEqual ("buffer", ex.ParamName, "#5");
2910 [Test] // Receive (Byte [], Int32, Int32, SocketFlags, out SocketError)
2911 public void Receive5_Socket_Closed ()
2913 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
2919 s.Receive ((byte []) null, 0, 0, SocketFlags.None, out error);
2921 } catch (ObjectDisposedException ex) {
2922 // Cannot access a disposed object
2923 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
2924 Assert.IsNull (ex.InnerException, "#3");
2925 Assert.IsNotNull (ex.Message, "#4");
2926 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
2930 [Test] // Receive (IList<ArraySegment<Byte>>)
2931 public void Receive6_Buffers_Null ()
2933 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
2937 s.Receive ((IList<ArraySegment<byte>>) null);
2939 } catch (ArgumentNullException ex) {
2940 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
2941 Assert.IsNull (ex.InnerException, "#3");
2942 Assert.IsNotNull (ex.Message, "#4");
2943 Assert.AreEqual ("buffers", ex.ParamName, "#5");
2949 [Test] // Receive (IList<ArraySegment<Byte>>)
2950 public void Receive6_Socket_Closed ()
2952 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
2957 s.Receive ((IList<ArraySegment<byte>>) null);
2959 } catch (ObjectDisposedException ex) {
2960 // Cannot access a disposed object
2961 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
2962 Assert.IsNull (ex.InnerException, "#3");
2963 Assert.IsNotNull (ex.Message, "#4");
2964 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
2968 [Test] // Receive (IList<ArraySegment<Byte>>, SocketFlags)
2969 public void Receive7_Buffers_Null ()
2971 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
2975 s.Receive ((IList<ArraySegment<byte>>) null, (SocketFlags) 666);
2977 } catch (ArgumentNullException ex) {
2978 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
2979 Assert.IsNull (ex.InnerException, "#3");
2980 Assert.IsNotNull (ex.Message, "#4");
2981 Assert.AreEqual ("buffers", ex.ParamName, "#5");
2987 [Test] // Receive (IList<ArraySegment<Byte>>, SocketFlags)
2988 public void Receive7_Socket_Closed ()
2990 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
2995 s.Receive ((IList<ArraySegment<byte>>) null, (SocketFlags) 666);
2997 } catch (ObjectDisposedException ex) {
2998 // Cannot access a disposed object
2999 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
3000 Assert.IsNull (ex.InnerException, "#3");
3001 Assert.IsNotNull (ex.Message, "#4");
3002 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
3006 [Test] // Receive (IList<ArraySegment<Byte>>, SocketFlags, out SocketError)
3007 public void Receive8_Buffers_Null ()
3009 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3014 s.Receive ((IList<ArraySegment<byte>>) null, (SocketFlags) 666,
3017 } catch (ArgumentNullException ex) {
3018 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
3019 Assert.IsNull (ex.InnerException, "#3");
3020 Assert.IsNotNull (ex.Message, "#4");
3021 Assert.AreEqual ("buffers", ex.ParamName, "#5");
3027 [Test] // Receive (IList<ArraySegment<Byte>>, SocketFlags, out SocketError)
3028 public void Receive8_Socket_Closed ()
3030 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3036 s.Receive ((IList<ArraySegment<byte>>) null, (SocketFlags) 666,
3039 } catch (ObjectDisposedException ex) {
3040 // Cannot access a disposed object
3041 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
3042 Assert.IsNull (ex.InnerException, "#3");
3043 Assert.IsNotNull (ex.Message, "#4");
3044 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
3050 [Test] // ReceiveFrom (Byte [], ref EndPoint)
3051 public void ReceiveFrom1_Buffer_Null ()
3053 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3056 EndPoint remoteEP = new IPEndPoint (IPAddress.Loopback, 8001);
3058 s.ReceiveFrom ((Byte []) null, ref remoteEP);
3060 } catch (ArgumentNullException ex) {
3061 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
3062 Assert.IsNull (ex.InnerException, "#3");
3063 Assert.IsNotNull (ex.Message, "#4");
3064 Assert.AreEqual ("buffer", ex.ParamName, "#5");
3070 [Test] // ReceiveFrom (Byte [], ref EndPoint)
3071 public void ReceiveFrom1_RemoteEP_Null ()
3073 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3076 byte [] buffer = new byte [0];
3077 EndPoint remoteEP = null;
3079 s.ReceiveFrom (buffer, ref remoteEP);
3081 } catch (ArgumentNullException ex) {
3082 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
3083 Assert.IsNull (ex.InnerException, "#3");
3084 Assert.IsNotNull (ex.Message, "#4");
3085 Assert.AreEqual ("remoteEP", ex.ParamName, "#5");
3091 [Test] // ReceiveFrom (Byte [], ref EndPoint)
3092 public void ReceiveFrom1_Socket_Closed ()
3094 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3098 EndPoint remoteEP = new IPEndPoint (IPAddress.Loopback, 8001);
3100 s.ReceiveFrom ((Byte []) null, ref remoteEP);
3102 } catch (ObjectDisposedException ex) {
3103 // Cannot access a disposed object
3104 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
3105 Assert.IsNull (ex.InnerException, "#3");
3106 Assert.IsNotNull (ex.Message, "#4");
3107 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
3111 [Test] // ReceiveFrom (Byte [], SocketFlags, ref EndPoint)
3112 public void ReceiveFrom2_Buffer_Null ()
3114 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3117 EndPoint remoteEP = new IPEndPoint (IPAddress.Loopback, 8001);
3119 s.ReceiveFrom ((Byte []) null, (SocketFlags) 666, ref remoteEP);
3121 } catch (ArgumentNullException ex) {
3122 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
3123 Assert.IsNull (ex.InnerException, "#3");
3124 Assert.IsNotNull (ex.Message, "#4");
3125 Assert.AreEqual ("buffer", ex.ParamName, "#5");
3131 [Test] // ReceiveFrom (Byte [], SocketFlags, ref EndPoint)
3132 public void ReceiveFrom2_RemoteEP_Null ()
3134 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3137 byte [] buffer = new byte [5];
3138 EndPoint remoteEP = null;
3140 s.ReceiveFrom (buffer, (SocketFlags) 666, ref remoteEP);
3142 } catch (ArgumentNullException ex) {
3143 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
3144 Assert.IsNull (ex.InnerException, "#3");
3145 Assert.IsNotNull (ex.Message, "#4");
3146 Assert.AreEqual ("remoteEP", ex.ParamName, "#5");
3152 [Test] // ReceiveFrom (Byte [], SocketFlags, ref EndPoint)
3153 public void ReceiveFrom2_Socket_Closed ()
3155 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3159 EndPoint remoteEP = new IPEndPoint (IPAddress.Loopback, 8001);
3161 s.ReceiveFrom ((Byte []) null, (SocketFlags) 666, ref remoteEP);
3163 } catch (ObjectDisposedException ex) {
3164 // Cannot access a disposed object
3165 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
3166 Assert.IsNull (ex.InnerException, "#3");
3167 Assert.IsNotNull (ex.Message, "#4");
3168 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
3172 [Test] // ReceiveFrom (Byte [], Int32, SocketFlags, ref EndPoint)
3173 public void ReceiveFrom3_Buffer_Null ()
3175 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3178 EndPoint remoteEP = new IPEndPoint (IPAddress.Loopback, 8001);
3180 s.ReceiveFrom ((Byte []) null, 0, (SocketFlags) 666,
3183 } catch (ArgumentNullException ex) {
3184 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
3185 Assert.IsNull (ex.InnerException, "#3");
3186 Assert.IsNotNull (ex.Message, "#4");
3187 Assert.AreEqual ("buffer", ex.ParamName, "#5");
3193 [Test] // ReceiveFrom (Byte [], Int32, SocketFlags, ref EndPoint)
3194 public void ReceiveFrom3_RemoteEP_Null ()
3196 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3199 byte [] buffer = new byte [5];
3200 EndPoint remoteEP = null;
3202 s.ReceiveFrom (buffer, buffer.Length, (SocketFlags) 666, ref remoteEP);
3204 } catch (ArgumentNullException ex) {
3205 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
3206 Assert.IsNull (ex.InnerException, "#3");
3207 Assert.IsNotNull (ex.Message, "#4");
3208 Assert.AreEqual ("remoteEP", ex.ParamName, "#5");
3214 [Test] // ReceiveFrom (Byte [], Int32, SocketFlags, ref EndPoint)
3215 public void ReceiveFrom3_Size_OutOfRange ()
3218 byte [] buffer = new byte [5];
3219 EndPoint remoteEP = new IPEndPoint (IPAddress.Loopback, 8001);
3222 s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3225 s.ReceiveFrom (buffer, -1, (SocketFlags) 666, ref remoteEP);
3226 Assert.Fail ("#A1");
3227 } catch (ArgumentOutOfRangeException ex) {
3228 // Specified argument was out of the range of valid values
3229 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#A2");
3230 Assert.IsNull (ex.InnerException, "#A3");
3231 Assert.IsNotNull (ex.Message, "#A4");
3232 Assert.AreEqual ("size", ex.ParamName, "#A5");
3237 // size > buffer length
3238 s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3241 s.ReceiveFrom (buffer, (buffer.Length + 1), (SocketFlags) 666,
3243 Assert.Fail ("#B1");
3244 } catch (ArgumentOutOfRangeException ex) {
3245 // Specified argument was out of the range of valid values
3246 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#B2");
3247 Assert.IsNull (ex.InnerException, "#B3");
3248 Assert.IsNotNull (ex.Message, "#B4");
3249 Assert.AreEqual ("size", ex.ParamName, "#B5");
3255 [Test] // ReceiveFrom (Byte [], Int32, SocketFlags, ref EndPoint)
3256 public void ReceiveFrom3_Socket_Closed ()
3258 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3262 EndPoint remoteEP = new IPEndPoint (IPAddress.Loopback, 8001);
3264 s.ReceiveFrom ((Byte []) null, -1, (SocketFlags) 666,
3267 } catch (ObjectDisposedException ex) {
3268 // Cannot access a disposed object
3269 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
3270 Assert.IsNull (ex.InnerException, "#3");
3271 Assert.IsNotNull (ex.Message, "#4");
3272 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
3276 [Test] // ReceiveFrom (Byte [], Int32, Int32, SocketFlags, EndPoint)
3277 public void ReceiveFrom4_Buffer_Null ()
3279 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3281 EndPoint remoteEP = new IPEndPoint (IPAddress.Loopback, 8001);
3284 s.ReceiveFrom ((Byte []) null, -1, -1, (SocketFlags) 666,
3287 } catch (ArgumentNullException ex) {
3288 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
3289 Assert.IsNull (ex.InnerException, "#3");
3290 Assert.IsNotNull (ex.Message, "#4");
3291 Assert.AreEqual ("buffer", ex.ParamName, "#5");
3295 [Test] // ReceiveFrom (Byte [], Int32, Int32, SocketFlags, EndPoint)
3296 public void ReceiveFrom4_Offset_OutOfRange ()
3299 byte [] buffer = new byte [5];
3300 EndPoint remoteEP = new IPEndPoint (IPAddress.Loopback, 8001);
3303 s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3306 s.ReceiveFrom (buffer, -1, 0, (SocketFlags) 666,
3308 Assert.Fail ("#A1");
3309 } catch (ArgumentOutOfRangeException ex) {
3310 // Specified argument was out of the range of valid values
3311 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#A2");
3312 Assert.IsNull (ex.InnerException, "#A3");
3313 Assert.IsNotNull (ex.Message, "#A4");
3314 Assert.AreEqual ("offset", ex.ParamName, "#A5");
3319 // offset > buffer length
3320 s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3323 s.ReceiveFrom (buffer, (buffer.Length + 1), 0, (SocketFlags) 666,
3325 Assert.Fail ("#B1");
3326 } catch (ArgumentOutOfRangeException ex) {
3327 // Specified argument was out of the range of valid values
3328 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#B2");
3329 Assert.IsNull (ex.InnerException, "#B3");
3330 Assert.IsNotNull (ex.Message, "#B4");
3331 Assert.AreEqual ("offset", ex.ParamName, "#B5");
3337 [Test] // ReceiveFrom (Byte [], Int32, Int32, SocketFlags, ref IPEndPoint)
3338 public void ReceiveFrom4_RemoteEP_Null ()
3340 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3342 byte [] buffer = new byte [5];
3343 EndPoint remoteEP = null;
3346 s.ReceiveFrom (buffer, 0, buffer.Length, (SocketFlags) 666, ref remoteEP);
3348 } catch (ArgumentNullException ex) {
3349 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
3350 Assert.IsNull (ex.InnerException, "#3");
3351 Assert.IsNotNull (ex.Message, "#4");
3352 Assert.AreEqual ("remoteEP", ex.ParamName, "#5");
3358 [Test] // ReceiveFrom (Byte [], Int32, Int32, SocketFlags, EndPoint)
3359 public void ReceiveFrom4_Size_OutOfRange ()
3362 byte [] buffer = new byte [5];
3363 EndPoint remoteEP = new IPEndPoint (IPAddress.Loopback, 8001);
3366 s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3369 s.ReceiveFrom (buffer, 0, -1, (SocketFlags) 666,
3371 Assert.Fail ("#A1");
3372 } catch (ArgumentOutOfRangeException ex) {
3373 // Specified argument was out of the range of valid values
3374 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#A2");
3375 Assert.IsNull (ex.InnerException, "#A3");
3376 Assert.IsNotNull (ex.Message, "#A4");
3377 Assert.AreEqual ("size", ex.ParamName, "#A5");
3382 // size > buffer length
3383 s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3386 s.ReceiveFrom (buffer, 0, (buffer.Length + 1), (SocketFlags) 666,
3388 Assert.Fail ("#B1");
3389 } catch (ArgumentOutOfRangeException ex) {
3390 // Specified argument was out of the range of valid values
3391 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#B2");
3392 Assert.IsNull (ex.InnerException, "#B3");
3393 Assert.IsNotNull (ex.Message, "#B4");
3394 Assert.AreEqual ("size", ex.ParamName, "#B5");
3399 // offset + size > buffer length
3400 s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3403 s.ReceiveFrom (buffer, 2, 4, (SocketFlags) 666, ref remoteEP);
3404 Assert.Fail ("#C1");
3405 } catch (ArgumentOutOfRangeException ex) {
3406 // Specified argument was out of the range of valid values
3407 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#C2");
3408 Assert.IsNull (ex.InnerException, "#C3");
3409 Assert.IsNotNull (ex.Message, "#C4");
3410 Assert.AreEqual ("size", ex.ParamName, "#C5");
3416 [Test] // ReceiveFrom (Byte [], Int32, Int32, SocketFlags, ref EndPoint)
3417 public void ReceiveFrom4_Socket_Closed ()
3419 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3423 byte [] buffer = new byte [5];
3424 EndPoint remoteEP = new IPEndPoint (IPAddress.Loopback, 8001);
3426 s.ReceiveFrom (buffer, -1, -1, (SocketFlags) 666,
3429 } catch (ObjectDisposedException ex) {
3430 // Cannot access a disposed object
3431 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
3432 Assert.IsNull (ex.InnerException, "#3");
3433 Assert.IsNotNull (ex.Message, "#4");
3434 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
3439 public void ReceiveRemoteClosed ()
3441 Socket sock = new Socket (AddressFamily.InterNetwork,
3444 sock.Bind (new IPEndPoint (IPAddress.Loopback, 1257));
3448 Thread client_thread = new Thread (new ThreadStart (RRCClientThread));
3449 client_thread.Start ();
3451 Socket client = sock.Accept ();
3452 NetworkStream stream = new NetworkStream (client);
3453 stream.WriteByte (0x00);
3454 stream.WriteByte (0x00);
3458 RRCReady.WaitOne (1000, false);
3459 Assert.IsTrue (RRCLastRead);
3463 // Test case for bug #471580
3465 public void UdpDoubleBind ()
3467 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
3468 s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, 1);
3470 s.Bind (new IPEndPoint (IPAddress.Any, 12345));
3472 Socket ss = new Socket (AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
3473 ss.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, 1);
3475 ss.Bind (new IPEndPoint (IPAddress.Any, 12345));
3477 // If we make it this far, we succeeded.
3483 static bool? supportsPortReuse;
3484 static bool SupportsPortReuse ()
3486 if (supportsPortReuse.HasValue)
3487 return supportsPortReuse.Value;
3489 supportsPortReuse = (bool) typeof (Socket).GetMethod ("SupportsPortReuse",
3490 BindingFlags.Static | BindingFlags.NonPublic)
3491 .Invoke (null, new object [] {});
3492 return supportsPortReuse.Value;
3495 // Test case for bug #31557
3497 public void TcpDoubleBind ()
3499 using (Socket s = new Socket (AddressFamily.InterNetwork,
3500 SocketType.Stream, ProtocolType.Tcp))
3501 using (Socket ss = new Socket (AddressFamily.InterNetwork,
3502 SocketType.Stream, ProtocolType.Tcp)) {
3503 s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
3505 s.Bind (new IPEndPoint (IPAddress.Any, 12345));
3508 ss.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
3510 Exception ex = null;
3512 ss.Bind (new IPEndPoint (IPAddress.Any, 12345));
3514 } catch (SocketException e) {
3518 Assert.AreEqual (SupportsPortReuse (), ex == null);
3523 [Category ("NotOnMac")]
3524 public void ConnectedProperty ()
3526 TcpListener listener = new TcpListener (IPAddress.Loopback, 23456);
3529 Socket client = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
3530 client.Connect (IPAddress.Loopback, 23456);
3531 Socket server = listener.AcceptSocket ();
3534 server.EndSend(server.BeginSend (new byte[10], 0, 10, SocketFlags.None, null, null));
3537 server.EndReceive (server.BeginReceive (new byte[10], 0, 10, SocketFlags.None, null, null));
3540 Assert.IsTrue (!client.Connected);
3541 Assert.IsTrue (!server.Connected);
3549 [Test] // GetSocketOption (SocketOptionLevel, SocketOptionName)
3550 public void GetSocketOption1_Socket_Closed ()
3552 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
3555 s.GetSocketOption (0, 0);
3557 } catch (ObjectDisposedException ex) {
3558 // Cannot access a disposed object
3559 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
3560 Assert.IsNull (ex.InnerException, "#3");
3561 Assert.IsNotNull (ex.Message, "#4");
3562 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
3566 [Test] // GetSocketOption (SocketOptionLevel, SocketOptionName, Byte [])
3567 public void GetSocketOption2_OptionValue_Null ()
3569 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
3571 s.GetSocketOption (SocketOptionLevel.Socket, SocketOptionName.Linger,
3574 } catch (SocketException ex) {
3575 // The system detected an invalid pointer address in attempting
3576 // to use a pointer argument in a call
3577 Assert.AreEqual (typeof (SocketException), ex.GetType (), "#2");
3578 Assert.AreEqual (10014, ex.ErrorCode, "#3");
3579 Assert.IsNull (ex.InnerException, "#4");
3580 Assert.IsNotNull (ex.Message, "#5");
3581 Assert.AreEqual (10014, ex.NativeErrorCode, "#6");
3582 Assert.AreEqual (SocketError.Fault, ex.SocketErrorCode, "#7");
3586 [Test] // GetSocketOption (SocketOptionLevel, SocketOptionName, Byte [])
3587 public void GetSocketOption2_Socket_Closed ()
3589 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
3592 s.GetSocketOption (0, 0, (byte []) null);
3594 } catch (ObjectDisposedException ex) {
3595 // Cannot access a disposed object
3596 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
3597 Assert.IsNull (ex.InnerException, "#3");
3598 Assert.IsNotNull (ex.Message, "#4");
3599 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
3603 [Test] // GetSocketOption (SocketOptionLevel, SocketOptionName, Int32)
3604 public void GetSocketOption3_Socket_Closed ()
3606 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
3609 s.GetSocketOption (0, 0, 0);
3611 } catch (ObjectDisposedException ex) {
3612 // Cannot access a disposed object
3613 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
3614 Assert.IsNull (ex.InnerException, "#3");
3615 Assert.IsNotNull (ex.Message, "#4");
3616 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
3620 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Byte [])
3621 public void SetSocketOption1_DontLinger ()
3623 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
3624 s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.DontLinger,
3625 new byte [] { 0x00 });
3626 s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.DontLinger,
3627 new byte [] { 0x01 });
3631 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Byte [])
3632 public void SetSocketOption1_DontLinger_Null ()
3634 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
3636 s.SetSocketOption (SocketOptionLevel.Socket,
3637 SocketOptionName.DontLinger, (byte []) null);
3639 } catch (SocketException ex) {
3640 // The system detected an invalid pointer address in attempting
3641 // to use a pointer argument in a call
3642 Assert.AreEqual (typeof (SocketException), ex.GetType (), "#2");
3643 Assert.AreEqual (10014, ex.ErrorCode, "#3");
3644 Assert.IsNull (ex.InnerException, "#4");
3645 Assert.IsNotNull (ex.Message, "#5");
3646 Assert.AreEqual (10014, ex.NativeErrorCode, "#6");
3647 Assert.AreEqual (SocketError.Fault, ex.SocketErrorCode, "#7");
3652 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Byte [])
3653 public void SetSocketOption1_Linger_Null ()
3655 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
3657 s.SetSocketOption (SocketOptionLevel.Socket,
3658 SocketOptionName.DontLinger, (byte []) null);
3660 } catch (SocketException ex) {
3661 // The system detected an invalid pointer address in attempting
3662 // to use a pointer argument in a call
3663 Assert.AreEqual (typeof (SocketException), ex.GetType (), "#2");
3664 Assert.AreEqual (10014, ex.ErrorCode, "#3");
3665 Assert.IsNull (ex.InnerException, "#4");
3666 Assert.IsNotNull (ex.Message, "#5");
3667 Assert.AreEqual (10014, ex.NativeErrorCode, "#6");
3668 Assert.AreEqual (SocketError.Fault, ex.SocketErrorCode, "#7");
3673 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Byte [])
3674 public void SetSocketOption1_Socket_Close ()
3676 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
3679 s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.DontLinger,
3680 new byte [] { 0x00 });
3682 } catch (ObjectDisposedException ex) {
3683 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
3684 Assert.IsNull (ex.InnerException, "#3");
3685 Assert.IsNotNull (ex.Message, "#4");
3686 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
3690 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Int32)
3691 public void SetSocketOption2_DontLinger ()
3693 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
3694 s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.DontLinger, 0);
3695 s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.DontLinger, 5);
3699 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Int32)
3700 [Category ("NotWorking")]
3701 public void SetSocketOption2_Linger ()
3703 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
3704 s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.Linger, 0);
3705 s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.Linger, 5);
3709 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Int32)
3710 public void SetSocketOption2_Socket_Closed ()
3712 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
3715 s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.DontLinger, 0);
3717 } catch (ObjectDisposedException ex) {
3718 // Cannot access a disposed object
3719 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
3720 Assert.IsNull (ex.InnerException, "#3");
3721 Assert.IsNotNull (ex.Message, "#4");
3722 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
3726 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
3727 public void SetSocketOption3_AddMembershipIPv4_IPv6MulticastOption ()
3729 IPAddress mcast_addr = IPAddress.Parse ("239.255.255.250");
3731 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp)) {
3732 s.Bind (new IPEndPoint (IPAddress.Any, 1901));
3734 s.SetSocketOption (SocketOptionLevel.IP, SocketOptionName.AddMembership,
3735 new IPv6MulticastOption (mcast_addr));
3737 } catch (ArgumentException ex) {
3738 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
3739 Assert.IsNull (ex.InnerException, "#3");
3740 Assert.IsNotNull (ex.Message, "#4");
3741 // The specified value is not a valid 'MulticastOption'
3742 Assert.IsTrue (ex.Message.IndexOf ("'MulticastOption'") != -1, "#5:" + ex.Message);
3743 Assert.AreEqual ("optionValue", ex.ParamName, "#6");
3748 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
3749 public void SetSocketOption3_AddMembershipIPv4_MulticastOption ()
3751 IPAddress mcast_addr = IPAddress.Parse ("239.255.255.250");
3753 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp)) {
3754 s.Bind (new IPEndPoint (IPAddress.Any, 1901));
3755 s.SetSocketOption (SocketOptionLevel.IP, SocketOptionName.AddMembership,
3756 new MulticastOption (mcast_addr));
3760 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
3761 [Category ("NotWorking")]
3762 public void SetSocketOption3_AddMembershipIPv4_Socket_NotBound ()
3764 IPAddress mcast_addr = IPAddress.Parse ("239.255.255.250");
3766 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
3768 s.SetSocketOption (SocketOptionLevel.IP, SocketOptionName.AddMembership,
3769 new MulticastOption (mcast_addr));
3771 } catch (SocketException ex) {
3772 // An invalid argument was supplied
3773 Assert.AreEqual (typeof (SocketException), ex.GetType (), "#2");
3774 Assert.AreEqual (10022, ex.ErrorCode, "#3");
3775 Assert.IsNull (ex.InnerException, "#4");
3776 Assert.IsNotNull (ex.Message, "#5");
3777 Assert.AreEqual (10022, ex.NativeErrorCode, "#6");
3778 Assert.AreEqual (SocketError.InvalidArgument, ex.SocketErrorCode, "#7");
3784 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
3785 public void SetSocketOption3_AddMembershipIPv6_IPv6MulticastOption ()
3787 if (!Socket.OSSupportsIPv6)
3788 Assert.Ignore ("IPv6 not enabled.");
3790 IPAddress mcast_addr = IPAddress.Parse ("ff02::1");
3792 using (Socket s = new Socket (AddressFamily.InterNetworkV6, SocketType.Dgram, ProtocolType.Udp)) {
3793 s.Bind (new IPEndPoint (IPAddress.IPv6Any, 1902));
3794 s.SetSocketOption (SocketOptionLevel.IPv6, SocketOptionName.AddMembership,
3795 new IPv6MulticastOption (mcast_addr));
3799 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
3800 public void SetSocketOption3_AddMembershipIPv6_MulticastOption ()
3802 if (!Socket.OSSupportsIPv6)
3803 Assert.Ignore ("IPv6 not enabled.");
3805 IPAddress mcast_addr = IPAddress.Parse ("ff02::1");
3807 using (Socket s = new Socket (AddressFamily.InterNetworkV6, SocketType.Dgram, ProtocolType.Udp)) {
3808 s.Bind (new IPEndPoint (IPAddress.IPv6Any, 1902));
3810 s.SetSocketOption (SocketOptionLevel.IPv6, SocketOptionName.AddMembership,
3811 new MulticastOption (mcast_addr));
3813 } catch (ArgumentException ex) {
3814 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
3815 Assert.IsNull (ex.InnerException, "#3");
3816 Assert.IsNotNull (ex.Message, "#4");
3817 // The specified value is not a valid 'IPv6MulticastOption'
3818 Assert.IsTrue (ex.Message.IndexOf ("'IPv6MulticastOption'") != -1, "#5:" + ex.Message);
3819 Assert.AreEqual ("optionValue", ex.ParamName, "#6");
3824 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
3825 [Category ("NotWorking")]
3826 public void SetSocketOption3_AddMembershipIPv6_Socket_NotBound ()
3828 IPAddress mcast_addr = IPAddress.Parse ("ff02::1");
3830 Socket s = new Socket (AddressFamily.InterNetworkV6, SocketType.Dgram, ProtocolType.Udp);
3832 s.SetSocketOption (SocketOptionLevel.IPv6, SocketOptionName.AddMembership,
3833 new IPv6MulticastOption (mcast_addr));
3835 } catch (SocketException ex) {
3836 // An invalid argument was supplied
3837 Assert.AreEqual (typeof (SocketException), ex.GetType (), "#2");
3838 Assert.AreEqual (10022, ex.ErrorCode, "#3");
3839 Assert.IsNull (ex.InnerException, "#4");
3840 Assert.IsNotNull (ex.Message, "#5");
3841 Assert.AreEqual (10022, ex.NativeErrorCode, "#6");
3842 Assert.AreEqual (SocketError.InvalidArgument, ex.SocketErrorCode, "#7");
3848 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
3849 public void SetSocketOption3_DontLinger_Boolean ()
3851 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
3853 s.SetSocketOption (SocketOptionLevel.Socket,
3854 SocketOptionName.DontLinger, (object) false);
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");
3860 Assert.IsNotNull (ex.Message, "#4");
3861 Assert.AreEqual ("optionValue", ex.ParamName, "#5");
3866 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
3867 public void SetSocketOption3_DontLinger_Int32 ()
3869 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
3871 s.SetSocketOption (SocketOptionLevel.Socket,
3872 SocketOptionName.DontLinger, (object) 0);
3874 } catch (ArgumentException ex) {
3875 // The specified value is not valid
3876 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
3877 Assert.IsNull (ex.InnerException, "#3");
3878 Assert.IsNotNull (ex.Message, "#4");
3879 Assert.AreEqual ("optionValue", ex.ParamName, "#5");
3884 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
3885 public void SetSocketOption3_DontLinger_LingerOption ()
3887 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
3889 s.SetSocketOption (SocketOptionLevel.Socket,
3890 SocketOptionName.DontLinger, new LingerOption (true, 1000));
3892 } catch (ArgumentException ex) {
3893 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
3894 Assert.IsNull (ex.InnerException, "#3");
3895 // The specified value is not valid
3896 Assert.IsNotNull (ex.Message, "#4");
3897 Assert.AreEqual ("optionValue", ex.ParamName, "#5");
3902 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
3903 public void SetSocketOption3_Linger_Boolean ()
3905 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
3907 s.SetSocketOption (SocketOptionLevel.Socket,
3908 SocketOptionName.Linger, (object) false);
3910 } catch (ArgumentException ex) {
3911 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
3912 Assert.IsNull (ex.InnerException, "#3");
3913 // The specified value is not valid
3914 Assert.IsNotNull (ex.Message, "#4");
3915 Assert.AreEqual ("optionValue", ex.ParamName, "#5");
3920 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
3921 public void SetSocketOption3_Linger_Int32 ()
3923 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
3925 s.SetSocketOption (SocketOptionLevel.Socket,
3926 SocketOptionName.Linger, (object) 0);
3928 } catch (ArgumentException ex) {
3929 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
3930 Assert.IsNull (ex.InnerException, "#3");
3931 // The specified value is not valid
3932 Assert.IsNotNull (ex.Message, "#4");
3933 Assert.AreEqual ("optionValue", ex.ParamName, "#5");
3938 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
3939 public void SetSocketOption3_Linger_LingerOption ()
3941 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
3942 s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.Linger,
3943 new LingerOption (false, 0));
3944 s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.Linger,
3945 new LingerOption (true, 0));
3946 s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.Linger,
3947 new LingerOption (false, 1000));
3948 s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.Linger,
3949 new LingerOption (true, 1000));
3953 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
3954 public void SetSocketOption3_DropMembershipIPv4_IPv6MulticastOption ()
3956 IPAddress mcast_addr = IPAddress.Parse ("239.255.255.250");
3958 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp)) {
3959 s.Bind (new IPEndPoint (IPAddress.Any, 1901));
3960 s.SetSocketOption (SocketOptionLevel.IP, SocketOptionName.AddMembership,
3961 new MulticastOption (mcast_addr));
3963 s.SetSocketOption (SocketOptionLevel.IP, SocketOptionName.DropMembership,
3964 new IPv6MulticastOption (mcast_addr));
3966 } catch (ArgumentException ex) {
3967 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
3968 Assert.IsNull (ex.InnerException, "#3");
3969 Assert.IsNotNull (ex.Message, "#4");
3970 // The specified value is not a valid 'MulticastOption'
3971 Assert.IsTrue (ex.Message.IndexOf ("'MulticastOption'") != -1, "#5:" + ex.Message);
3972 Assert.AreEqual ("optionValue", ex.ParamName, "#6");
3977 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
3978 public void SetSocketOption3_DropMembershipIPv4_MulticastOption ()
3980 IPAddress mcast_addr = IPAddress.Parse ("239.255.255.250");
3982 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp)) {
3983 MulticastOption option = new MulticastOption (mcast_addr);
3985 s.Bind (new IPEndPoint (IPAddress.Any, 1901));
3986 s.SetSocketOption (SocketOptionLevel.IP, SocketOptionName.AddMembership,
3988 s.SetSocketOption (SocketOptionLevel.IP, SocketOptionName.DropMembership,
3993 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
3994 [Category ("NotWorking")]
3995 public void SetSocketOption3_DropMembershipIPv4_Socket_NotBound ()
3997 IPAddress mcast_addr = IPAddress.Parse ("239.255.255.250");
3999 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
4001 s.SetSocketOption (SocketOptionLevel.IP, SocketOptionName.DropMembership,
4002 new MulticastOption (mcast_addr));
4004 } catch (SocketException ex) {
4005 // An invalid argument was supplied
4006 Assert.AreEqual (typeof (SocketException), ex.GetType (), "#2");
4007 Assert.AreEqual (10022, ex.ErrorCode, "#3");
4008 Assert.IsNull (ex.InnerException, "#4");
4009 Assert.IsNotNull (ex.Message, "#5");
4010 Assert.AreEqual (10022, ex.NativeErrorCode, "#6");
4011 Assert.AreEqual (SocketError.InvalidArgument, ex.SocketErrorCode, "#7");
4017 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
4018 public void SetSocketOption3_DropMembershipIPv6_IPv6MulticastOption ()
4020 if (!Socket.OSSupportsIPv6)
4021 Assert.Ignore ("IPv6 not enabled.");
4023 using (Socket s = new Socket (AddressFamily.InterNetworkV6, SocketType.Dgram, ProtocolType.Udp)) {
4024 IPv6MulticastOption option = new IPv6MulticastOption (
4025 IPAddress.Parse ("ff02::1"));
4027 s.Bind (new IPEndPoint (IPAddress.IPv6Any, 1902));
4028 s.SetSocketOption (SocketOptionLevel.IPv6, SocketOptionName.AddMembership,
4030 s.SetSocketOption (SocketOptionLevel.IPv6, SocketOptionName.DropMembership,
4035 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
4036 public void SetSocketOption3_DropMembershipIPv6_MulticastOption ()
4038 if (!Socket.OSSupportsIPv6)
4039 Assert.Ignore ("IPv6 not enabled.");
4041 IPAddress mcast_addr = IPAddress.Parse ("ff02::1");
4043 using (Socket s = new Socket (AddressFamily.InterNetworkV6, SocketType.Dgram, ProtocolType.Udp)) {
4044 s.Bind (new IPEndPoint (IPAddress.IPv6Any, 1902));
4045 s.SetSocketOption (SocketOptionLevel.IPv6, SocketOptionName.AddMembership,
4046 new IPv6MulticastOption (mcast_addr));
4048 s.SetSocketOption (SocketOptionLevel.IPv6, SocketOptionName.DropMembership,
4049 new MulticastOption (mcast_addr));
4051 } catch (ArgumentException ex) {
4052 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
4053 Assert.IsNull (ex.InnerException, "#3");
4054 Assert.IsNotNull (ex.Message, "#4");
4055 // The specified value is not a valid 'IPv6MulticastOption'
4056 Assert.IsTrue (ex.Message.IndexOf ("'IPv6MulticastOption'") != -1, "#5:" + ex.Message);
4057 Assert.AreEqual ("optionValue", ex.ParamName, "#6");
4062 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
4063 [Category ("NotWorking")]
4064 public void SetSocketOption3_DropMembershipIPv6_Socket_NotBound ()
4066 IPAddress mcast_addr = IPAddress.Parse ("ff02::1");
4068 Socket s = new Socket (AddressFamily.InterNetworkV6, SocketType.Dgram, ProtocolType.Udp);
4070 s.SetSocketOption (SocketOptionLevel.IPv6, SocketOptionName.DropMembership,
4071 new IPv6MulticastOption (mcast_addr));
4073 } catch (SocketException ex) {
4074 // An invalid argument was supplied
4075 Assert.AreEqual (typeof (SocketException), ex.GetType (), "#2");
4076 Assert.AreEqual (10022, ex.ErrorCode, "#3");
4077 Assert.IsNull (ex.InnerException, "#4");
4078 Assert.IsNotNull (ex.Message, "#5");
4079 Assert.AreEqual (10022, ex.NativeErrorCode, "#6");
4080 Assert.AreEqual (SocketError.InvalidArgument, ex.SocketErrorCode, "#7");
4086 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
4087 public void SetSocketOption3_OptionValue_Null ()
4089 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
4091 s.SetSocketOption (SocketOptionLevel.Socket,
4092 SocketOptionName.Linger, (object) null);
4094 } catch (ArgumentNullException ex) {
4095 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
4096 Assert.IsNull (ex.InnerException, "#3");
4097 Assert.IsNotNull (ex.Message, "#4");
4098 Assert.AreEqual ("optionValue", ex.ParamName, "#5");
4103 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
4104 public void SetSocketOption3_Socket_Closed ()
4106 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
4109 s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.Linger,
4110 new LingerOption (false, 0));
4112 } catch (ObjectDisposedException ex) {
4113 // Cannot access a disposed object
4114 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
4115 Assert.IsNull (ex.InnerException, "#3");
4116 Assert.IsNotNull (ex.Message, "#4");
4117 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
4122 public void SetSocketOption_MulticastInterfaceIndex_Any ()
4124 IPAddress ip = IPAddress.Parse ("239.255.255.250");
4126 using (Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp))
4128 s.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.MulticastInterface, IPAddress.HostToNetworkOrder(index));
4129 s.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership, new MulticastOption(ip, index));
4134 public void SetSocketOption_MulticastInterfaceIndex_Loopback ()
4136 IPAddress ip = IPAddress.Parse ("239.255.255.250");
4138 using (Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp))
4140 s.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.MulticastInterface, IPAddress.HostToNetworkOrder(index));
4141 s.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership, new MulticastOption(ip, index));
4146 public void SetSocketOption_MulticastInterfaceIndex_Invalid ()
4148 IPAddress ip = IPAddress.Parse ("239.255.255.250");
4150 using (Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp))
4154 s.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.MulticastInterface, IPAddress.HostToNetworkOrder(index));
4161 s.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership, new MulticastOption(ip, index));
4170 public void Shutdown_NoConnect ()
4172 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
4173 s.Bind (new IPEndPoint (IPAddress.Loopback, 0));
4176 s.Shutdown (SocketShutdown.Both);
4178 } catch (SocketException exc) {
4179 Assert.AreEqual (10057, exc.ErrorCode, "#2");
4186 [ExpectedException (typeof (NullReferenceException))]
4187 public void ReceiveAsync_Null ()
4189 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
4190 s.ReceiveAsync (null);
4195 [ExpectedException (typeof (NullReferenceException))]
4196 public void ReceiveAsync_Default ()
4198 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
4199 SocketAsyncEventArgs saea = new SocketAsyncEventArgs ();
4200 s.ReceiveAsync (saea);
4206 [ExpectedException (typeof (NullReferenceException))]
4207 public void ReceiveAsync_NullBuffer ()
4209 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
4210 SocketAsyncEventArgs saea = new SocketAsyncEventArgs ();
4211 saea.SetBuffer (null, 0, 0);
4212 s.ReceiveAsync (null);
4217 [ExpectedException (typeof (ObjectDisposedException))]
4218 public void ReceiveAsync_ClosedSocket ()
4220 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
4222 s.ReceiveAsync (null);
4226 [ExpectedException (typeof (NullReferenceException))]
4227 public void SendAsync_Null ()
4229 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
4235 [ExpectedException (typeof (NullReferenceException))]
4236 public void SendAsync_Default ()
4238 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
4239 SocketAsyncEventArgs saea = new SocketAsyncEventArgs ();
4246 [ExpectedException (typeof (NullReferenceException))]
4247 public void SendAsync_NullBuffer ()
4249 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
4250 SocketAsyncEventArgs saea = new SocketAsyncEventArgs ();
4251 saea.SetBuffer (null, 0, 0);
4257 [ExpectedException (typeof (ObjectDisposedException))]
4258 public void SendAsync_ClosedSocket ()
4260 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
4266 public void SendAsyncFile ()
4268 Socket serverSocket = StartSocketServer ();
4270 Socket clientSocket = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
4271 clientSocket.Connect (serverSocket.LocalEndPoint);
4272 clientSocket.NoDelay = true;
4274 // Initialize buffer used to create testing file
4275 var buffer = new byte [1024];
4276 for (int i = 0; i < 1024; ++i)
4277 buffer [i] = (byte) (i % 256);
4279 string temp = Path.GetTempFileName ();
4281 // Testing file creation
4282 using (StreamWriter sw = new StreamWriter (temp)) {
4286 var m = new ManualResetEvent (false);
4288 // Async Send File to server
4289 clientSocket.BeginSendFile(temp, (ar) => {
4290 Socket client = (Socket) ar.AsyncState;
4291 client.EndSendFile (ar);
4295 if (!m.WaitOne (1500))
4296 throw new TimeoutException ();
4299 if (File.Exists (temp))
4302 clientSocket.Close ();
4303 serverSocket.Close ();
4307 Socket StartSocketServer ()
4310 Socket listenSocket = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
4312 listenSocket.Bind (new IPEndPoint (IPAddress.Loopback, 0));
4313 listenSocket.Listen (1);
4315 listenSocket.BeginAccept (new AsyncCallback (ReceiveCallback), listenSocket);
4317 return listenSocket;
4320 public static void ReceiveCallback (IAsyncResult AsyncCall)
4322 byte[] bytes = new byte [1024];
4324 Socket listener = (Socket)AsyncCall.AsyncState;
4325 Socket client = listener.EndAccept (AsyncCall);
4327 client.Receive (bytes, bytes.Length, 0);
4332 public void UdpMulticasTimeToLive ()
4334 /* see https://bugzilla.xamarin.com/show_bug.cgi?id=36941 */
4336 using (Socket socket = new Socket (AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp)) {
4337 IPEndPoint end_point = new IPEndPoint (IPAddress.Any, 11000);
4338 socket.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, 1);
4339 socket.Bind (end_point);
4340 socket.SetSocketOption (SocketOptionLevel.IP, SocketOptionName.MulticastTimeToLive, 19);