1 // System.Net.Sockets.SocketTest.cs
4 // Brad Fitzpatrick (brad@danga.com)
5 // Gonzalo Paniagua Javier (gonzalo@novell.com)
7 // (C) Copyright 2003 Brad Fitzpatrick
8 // Copyright (c) 2005 Novell, Inc. (http://www.novell.com)
12 using System.Diagnostics;
14 using System.Collections;
15 using System.Threading;
16 using System.Reflection;
17 using System.Text.RegularExpressions;
19 using System.Net.Sockets;
20 using NUnit.Framework;
23 using System.Collections.Generic;
25 namespace MonoTests.System.Net.Sockets
28 public class SocketTest
30 // note: also used in SocketCas tests
31 public const string BogusAddress = "192.168.244.244";
32 public const int BogusPort = 23483;
35 public void ConnectIPAddressAny ()
37 IPEndPoint ep = new IPEndPoint (IPAddress.Any, 0);
39 /* UDP sockets use Any to disconnect
41 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp)) {
46 } catch (SocketException ex) {
47 Assert.AreEqual (10049, ex.ErrorCode, "#2");
52 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
57 } catch (SocketException ex) {
58 Assert.AreEqual (10049, ex.ErrorCode, "#4");
63 [Ignore ("Bug #75158")] // Looks like MS fails after the .ctor, when you try to use the socket
64 public void IncompatibleAddress ()
66 IPEndPoint epIPv6 = new IPEndPoint (IPAddress.IPv6Any,
70 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP)) {
75 } catch (SocketException ex) {
76 // address incompatible with protocol
77 int expectedError = 10047;
78 Assert.AreEqual (expectedError, ex.ErrorCode,
84 [Category ("InetAccess")]
85 public void BogusEndConnect ()
87 IPAddress ipOne = IPAddress.Parse (BogusAddress);
88 IPEndPoint ipEP = new IPEndPoint (ipOne, BogusPort);
89 Socket sock = new Socket (ipEP.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
90 IAsyncResult ar = sock.BeginConnect (ipEP, null, null);
93 // should raise an exception because connect was bogus
96 } catch (SocketException ex) {
97 // Actual error code depends on network configuration.
98 var error = (SocketError) ex.ErrorCode;
99 Assert.That (error == SocketError.TimedOut ||
100 error == SocketError.ConnectionRefused ||
101 error == SocketError.NetworkUnreachable ||
102 error == SocketError.HostUnreachable, "#2");
107 [ExpectedException (typeof (ArgumentNullException))]
108 public void SelectEmpty ()
110 ArrayList list = new ArrayList ();
111 Socket.Select (list, list, list, 1000);
114 private bool BlockingConnect (bool block)
116 IPEndPoint ep = new IPEndPoint(IPAddress.Loopback, 1234);
117 Socket server = new Socket(AddressFamily.InterNetwork,
121 server.Blocking=block;
125 Socket conn = new Socket (AddressFamily.InterNetwork,
130 Socket client = null;
131 var sw = Stopwatch.StartNew ();
132 while (sw.ElapsedMilliseconds < 100)
135 client = server.Accept();
138 catch (SocketException ex) {
139 if (ex.SocketErrorCode == SocketError.WouldBlock)
144 Assert.IsNotNull (client, "Couldn't accept a client connection within 100ms.");
145 bool client_block = client.Blocking;
151 return(client_block);
155 public void AcceptBlockingStatus()
159 block = BlockingConnect(true);
160 Assert.AreEqual (block, true, "BlockingStatus01");
162 block = BlockingConnect(false);
163 Assert.AreEqual (block, false, "BlockingStatus02");
166 static bool CFAConnected = false;
167 static ManualResetEvent CFACalledBack;
169 private static void CFACallback (IAsyncResult asyncResult)
171 Socket sock = (Socket)asyncResult.AsyncState;
172 CFAConnected = sock.Connected;
174 if (sock.Connected) {
175 sock.EndConnect (asyncResult);
178 CFACalledBack.Set ();
181 [Test] // Connect (IPEndPoint)
182 public void Connect1_RemoteEP_Null ()
184 Socket s = new Socket (AddressFamily.InterNetwork,
185 SocketType.Stream, ProtocolType.Tcp);
187 s.Connect ((IPEndPoint) null);
189 } catch (ArgumentNullException ex) {
190 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
191 Assert.IsNull (ex.InnerException, "#3");
192 Assert.IsNotNull (ex.Message, "#4");
193 Assert.AreEqual ("remoteEP", ex.ParamName, "#5");
198 public void ConnectFailAsync ()
200 Socket sock = new Socket (AddressFamily.InterNetwork,
203 sock.Blocking = false;
204 CFACalledBack = new ManualResetEvent (false);
205 CFACalledBack.Reset ();
207 /* Need a port that is not being used for
210 sock.BeginConnect (new IPEndPoint (IPAddress.Loopback,
212 new AsyncCallback (CFACallback),
214 CFACalledBack.WaitOne ();
216 Assert.AreEqual (CFAConnected, false, "ConnectFail");
220 public void SetSocketOptionBoolean ()
222 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 1);
223 Socket sock = new Socket (ep.Address.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
225 sock.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.KeepAlive, true);
231 public void TestSelect1 ()
233 Socket srv = CreateServer ();
234 ClientSocket clnt = new ClientSocket (srv.LocalEndPoint);
235 Thread th = new Thread (new ThreadStart (clnt.ConnectSleepClose));
241 ArrayList list = new ArrayList ();
242 ArrayList empty = new ArrayList ();
244 Socket.Select (list, empty, empty, 100);
245 Assert.AreEqual (0, empty.Count, "#01");
246 Assert.AreEqual (1, list.Count, "#02");
247 Socket.Select (empty, list, empty, 100);
248 Assert.AreEqual (0, empty.Count, "#03");
249 Assert.AreEqual (1, list.Count, "#04");
250 Socket.Select (list, empty, empty, -1);
251 Assert.AreEqual (0, empty.Count, "#05");
252 Assert.AreEqual (1, list.Count, "#06");
253 // Need to read the 10 bytes from the client to avoid a RST
254 byte [] bytes = new byte [10];
263 static Socket CreateServer ()
265 Socket sock = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
266 sock.Bind (new IPEndPoint (IPAddress.Loopback, 0));
275 public ClientSocket (EndPoint ep)
278 sock = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
281 public void ConnectSleepClose ()
290 byte [] b = new byte [10];
295 byte[] buf = new byte[100];
298 [ExpectedException (typeof (ObjectDisposedException))]
299 public void Disposed2 ()
301 Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
308 [ExpectedException (typeof (ObjectDisposedException))]
309 public void Disposed6 ()
311 Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
318 [ExpectedException (typeof (ObjectDisposedException))]
319 public void Disposed7 ()
321 Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
328 [ExpectedException (typeof (ObjectDisposedException))]
329 public void Disposed15 ()
331 Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
338 [ExpectedException (typeof (ObjectDisposedException))]
339 public void Disposed16 ()
341 Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
348 [ExpectedException (typeof (ObjectDisposedException))]
349 public void Disposed17 ()
351 Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
358 [ExpectedException (typeof (ObjectDisposedException))]
359 public void Disposed18 ()
361 Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
364 s.Send (buf, 0, 10, 0);
368 [ExpectedException (typeof (ObjectDisposedException))]
369 public void Disposed19 ()
371 Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
372 EndPoint ep = new IPEndPoint (IPAddress.Any, 31337);
375 s.SendTo (buf, 0, ep);
379 [ExpectedException (typeof (ObjectDisposedException))]
380 public void Disposed20 ()
382 Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
383 EndPoint ep = new IPEndPoint (IPAddress.Any, 31337);
386 s.SendTo (buf, 10, 0, ep);
390 [ExpectedException (typeof (ObjectDisposedException))]
391 public void Disposed21 ()
393 Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
394 EndPoint ep = new IPEndPoint (IPAddress.Any, 31337);
397 s.SendTo (buf, 0, 10, 0, ep);
401 [ExpectedException (typeof (ObjectDisposedException))]
402 public void Disposed22 ()
404 Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
405 EndPoint ep = new IPEndPoint (IPAddress.Any, 31337);
412 [ExpectedException (typeof (ObjectDisposedException))]
413 public void Disposed23 ()
415 Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
422 public void GetHashCodeTest ()
424 Socket server = new Socket (AddressFamily.InterNetwork,
425 SocketType.Stream, ProtocolType.Tcp);
426 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
431 Socket client = new Socket (AddressFamily.InterNetwork,
432 SocketType.Stream, ProtocolType.Tcp);
433 int hashcodeA = client.GetHashCode ();
435 int hashcodeB = client.GetHashCode ();
436 Assert.AreEqual (hashcodeA, hashcodeB, "#1");
438 int hashcodeC = client.GetHashCode ();
439 Assert.AreEqual (hashcodeB, hashcodeC, "#2");
443 static ManualResetEvent SocketError_event = new ManualResetEvent (false);
445 private static void SocketError_callback (IAsyncResult ar)
447 Socket sock = (Socket)ar.AsyncState;
450 sock.EndConnect (ar);
453 SocketError_event.Set ();
457 public void SocketErrorTest ()
459 Socket sock = new Socket (AddressFamily.InterNetwork,
462 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
465 SocketError_event.Reset ();
467 sock.Blocking = false;
468 sock.BeginConnect (ep, new AsyncCallback(SocketError_callback),
471 if (SocketError_event.WaitOne (2000, false) == false) {
472 Assert.Fail ("SocketError wait timed out");
475 Assert.AreEqual (false, sock.Connected, "SocketError #1");
479 error = (int)sock.GetSocketOption (SocketOptionLevel.Socket, SocketOptionName.Error);
480 Assert.AreEqual (10061, error, "SocketError #2");
482 error = (int)sock.GetSocketOption (SocketOptionLevel.Socket, SocketOptionName.Error);
483 Assert.AreEqual (10061, error, "SocketError #3");
490 public void SocketInformationCtor ()
495 public void DontFragmentDefaultTcp ()
497 Socket sock = new Socket (AddressFamily.InterNetwork,
501 Assert.AreEqual (false, sock.DontFragment, "DontFragmentDefaultTcp");
507 [Category ("NotWorking")] // DontFragment doesn't work
508 public void DontFragmentChangeTcp ()
510 Socket sock = new Socket (AddressFamily.InterNetwork,
514 sock.DontFragment = true;
516 Assert.AreEqual (true, sock.DontFragment, "DontFragmentChangeTcp");
522 public void DontFragmentDefaultUdp ()
524 Socket sock = new Socket (AddressFamily.InterNetwork,
528 Assert.AreEqual (false, sock.DontFragment, "DontFragmentDefaultUdp");
534 [Category ("NotWorking")] // DontFragment doesn't work
535 public void DontFragmentChangeUdp ()
537 Socket sock = new Socket (AddressFamily.InterNetwork,
541 sock.DontFragment = true;
543 Assert.AreEqual (true, sock.DontFragment, "DontFragmentChangeUdp");
549 [ExpectedException (typeof(ObjectDisposedException))]
550 public void DontFragmentClosed ()
552 Socket sock = new Socket (AddressFamily.InterNetwork,
558 bool val = sock.DontFragment;
562 [Category ("NotWorking")] // Need to pick a non-IP AddressFamily that "works" on both mono and ms, this one only works on ms
563 public void DontFragment ()
565 Socket sock = new Socket (AddressFamily.NetBios,
566 SocketType.Seqpacket,
567 ProtocolType.Unspecified);
570 sock.DontFragment = true;
571 Assert.Fail ("DontFragment #1");
572 } catch (NotSupportedException) {
574 Assert.Fail ("DontFragment #2");
581 public void EnableBroadcastDefaultTcp ()
583 Socket sock = new Socket (AddressFamily.InterNetwork,
588 bool value = sock.EnableBroadcast;
589 Assert.Fail ("EnableBroadcastDefaultTcp #1");
590 } catch (SocketException ex) {
591 Assert.AreEqual (10042, ex.ErrorCode, "EnableBroadcastDefaultTcp #2");
593 Assert.Fail ("EnableBroadcastDefaultTcp #2");
600 public void EnableBroadcastDefaultUdp ()
602 Socket sock = new Socket (AddressFamily.InterNetwork,
606 Assert.AreEqual (false, sock.EnableBroadcast, "EnableBroadcastDefaultUdp");
612 public void EnableBroadcastChangeTcp ()
614 Socket sock = new Socket (AddressFamily.InterNetwork,
619 sock.EnableBroadcast = true;
620 Assert.Fail ("EnableBroadcastChangeTcp #1");
621 } catch (SocketException ex) {
622 Assert.AreEqual (10042, ex.ErrorCode, "EnableBroadcastChangeTcp #2");
624 Assert.Fail ("EnableBroadcastChangeTcp #2");
631 public void EnableBroadcastChangeUdp ()
633 Socket sock = new Socket (AddressFamily.InterNetwork,
637 sock.EnableBroadcast = true;
639 Assert.AreEqual (true, sock.EnableBroadcast, "EnableBroadcastChangeUdp");
645 [ExpectedException (typeof(ObjectDisposedException))]
646 public void EnableBroadcastClosed ()
648 Socket sock = new Socket (AddressFamily.InterNetwork,
654 bool val = sock.EnableBroadcast;
657 /* Can't test the default for ExclusiveAddressUse as
658 * it's different on different versions and service
662 [Category ("NotWorking")] // Not supported on Linux
663 public void ExclusiveAddressUseUnbound ()
665 Socket sock = new Socket (AddressFamily.InterNetwork,
669 sock.ExclusiveAddressUse = true;
671 Assert.AreEqual (true, sock.ExclusiveAddressUse, "ExclusiveAddressUseUnbound");
677 [ExpectedException (typeof(InvalidOperationException))]
678 [Category ("NotWorking")] // Not supported on Linux
679 public void ExclusiveAddressUseBound ()
681 Socket sock = new Socket (AddressFamily.InterNetwork,
685 sock.Bind (new IPEndPoint (IPAddress.Any, 1235));
686 sock.ExclusiveAddressUse = true;
691 [ExpectedException (typeof(ObjectDisposedException))]
692 public void ExclusiveAddressUseClosed ()
694 Socket sock = new Socket (AddressFamily.InterNetwork,
700 bool val = sock.ExclusiveAddressUse;
704 public void IsBoundTcp ()
706 Socket sock = new Socket (AddressFamily.InterNetwork,
709 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
712 Assert.AreEqual (false, sock.IsBound, "IsBoundTcp #1");
715 Assert.AreEqual (true, sock.IsBound, "IsBoundTcp #2");
719 Socket sock2 = new Socket (AddressFamily.InterNetwork,
723 Assert.AreEqual (false, sock2.IsBound, "IsBoundTcp #3");
726 Assert.AreEqual (true, sock2.IsBound, "IsBoundTcp #4");
729 Assert.AreEqual (true, sock2.IsBound, "IsBoundTcp #5");
732 Assert.AreEqual (true, sock.IsBound, "IsBoundTcp #6");
736 public void IsBoundUdp ()
738 Socket sock = new Socket (AddressFamily.InterNetwork,
741 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
744 Assert.AreEqual (false, sock.IsBound, "IsBoundUdp #1");
747 Assert.AreEqual (true, sock.IsBound, "IsBoundUdp #2");
750 Assert.AreEqual (true, sock.IsBound, "IsBoundUdp #3");
753 sock = new Socket (AddressFamily.InterNetwork,
757 Assert.AreEqual (false, sock.IsBound, "IsBoundUdp #4");
760 Assert.AreEqual (true, sock.IsBound, "IsBoundUdp #5");
763 Assert.AreEqual (true, sock.IsBound, "IsBoundUdp #6");
767 /* Should not throw an exception */
768 public void IsBoundClosed ()
770 Socket sock = new Socket (AddressFamily.InterNetwork,
776 bool val = sock.IsBound;
779 /* Nothing much to test for LingerState */
782 public void MulticastLoopbackDefaultTcp ()
784 Socket sock = new Socket (AddressFamily.InterNetwork,
789 bool value = sock.MulticastLoopback;
790 Assert.Fail ("MulticastLoopbackDefaultTcp #1");
791 } catch (SocketException ex) {
792 Assert.AreEqual (10042, ex.ErrorCode, "MulticastLoopbackDefaultTcp #2");
794 Assert.Fail ("MulticastLoopbackDefaultTcp #2");
801 public void MulticastLoopbackChangeTcp ()
803 Socket sock = new Socket (AddressFamily.InterNetwork,
808 sock.MulticastLoopback = false;
809 Assert.Fail ("MulticastLoopbackChangeTcp #1");
810 } catch (SocketException ex) {
811 Assert.AreEqual (10042, ex.ErrorCode, "MulticastLoopbackChangeTcp #2");
813 Assert.Fail ("MulticastLoopbackChangeTcp #2");
820 public void MulticastLoopbackDefaultUdp ()
822 Socket sock = new Socket (AddressFamily.InterNetwork,
826 Assert.AreEqual (true, sock.MulticastLoopback, "MulticastLoopbackDefaultUdp");
832 public void MulticastLoopbackChangeUdp ()
834 Socket sock = new Socket (AddressFamily.InterNetwork,
838 sock.MulticastLoopback = false;
840 Assert.AreEqual (false, sock.MulticastLoopback, "MulticastLoopbackChangeUdp");
846 [ExpectedException (typeof(ObjectDisposedException))]
847 public void MulticastLoopbackClosed ()
849 Socket sock = new Socket (AddressFamily.InterNetwork,
855 bool val = sock.MulticastLoopback;
858 /* OSSupportsIPv6 depends on the environment */
861 [Category("NotWorking")] // We have different defaults for perf reasons
862 public void ReceiveBufferSizeDefault ()
864 Socket sock = new Socket (AddressFamily.InterNetwork,
868 Assert.AreEqual (8192, sock.ReceiveBufferSize, "ReceiveBufferSizeDefault");
874 [Category("NotWorking")] // We have different defaults for perf reasons
875 public void ReceiveBufferSizeDefaultUdp ()
877 Socket sock = new Socket (AddressFamily.InterNetwork,
881 Assert.AreEqual (8192, sock.ReceiveBufferSize, "ReceiveBufferSizeDefaultUdp");
887 public void ReceiveBufferSizeChange ()
889 Socket sock = new Socket (AddressFamily.InterNetwork,
893 sock.ReceiveBufferSize = 16384;
895 Assert.AreEqual (16384, sock.ReceiveBufferSize, "ReceiveBufferSizeChange");
901 [Category("NotWorking")] // We cannot totally remove buffers (minimum is set to 256
902 public void BuffersCheck_None ()
904 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
905 int original = s.ReceiveBufferSize;
906 s.ReceiveBufferSize = 0;
907 Assert.AreEqual (0, s.ReceiveBufferSize, "ReceiveBufferSize " + original.ToString ());
909 original = s.SendBufferSize;
910 s.SendBufferSize = 0;
911 Assert.AreEqual (0, s.SendBufferSize, "SendBufferSize " + original.ToString ());
916 [ExpectedException (typeof(ObjectDisposedException))]
917 public void ReceiveBufferSizeClosed ()
919 Socket sock = new Socket (AddressFamily.InterNetwork,
925 int val = sock.ReceiveBufferSize;
929 [Category("NotWorking")] // We have different defaults for perf reasons
930 public void SendBufferSizeDefault ()
932 Socket sock = new Socket (AddressFamily.InterNetwork,
936 Assert.AreEqual (8192, sock.SendBufferSize, "SendBufferSizeDefault");
942 [Category("NotWorking")] // We have different defaults for perf reasons
943 public void SendBufferSizeDefaultUdp ()
945 Socket sock = new Socket (AddressFamily.InterNetwork,
949 Assert.AreEqual (8192, sock.SendBufferSize, "SendBufferSizeDefaultUdp");
955 public void SendBufferSizeChange ()
957 Socket sock = new Socket (AddressFamily.InterNetwork,
961 sock.SendBufferSize = 16384;
963 Assert.AreEqual (16384, sock.SendBufferSize, "SendBufferSizeChange");
969 [ExpectedException (typeof(ObjectDisposedException))]
970 public void SendBufferSizeClosed ()
972 Socket sock = new Socket (AddressFamily.InterNetwork,
978 int val = sock.SendBufferSize;
981 /* No test for TTL default as it's platform dependent */
983 public void TtlChange ()
985 Socket sock = new Socket (AddressFamily.InterNetwork,
991 Assert.AreEqual (255, sock.Ttl, "TtlChange");
997 [Category ("NotOnMac")] // Mac doesn't throw when overflowing the ttl
998 public void TtlChangeOverflow ()
1000 Socket sock = new Socket (AddressFamily.InterNetwork,
1006 Assert.Fail ("TtlChangeOverflow #1");
1007 } catch (SocketException ex) {
1008 Assert.AreEqual (10022, ex.ErrorCode,
1009 "TtlChangeOverflow #2");
1011 Assert.Fail ("TtlChangeoverflow #3");
1017 /* Apparently you can set TTL=0 on the ms runtime!!
1020 Assert.Fail ("TtlChangeOverflow #4");
1021 } catch (SocketException ex) {
1022 Assert.AreEqual (10022, ex.ErrorCode,
1023 "TtlChangeOverflow #5");
1025 Assert.Fail ("TtlChangeOverflow #6");
1032 [ExpectedException (typeof(ObjectDisposedException))]
1033 public void TtlClosed ()
1035 Socket sock = new Socket (AddressFamily.InterNetwork,
1045 public void UseOnlyOverlappedIODefault ()
1047 Socket sock = new Socket (AddressFamily.InterNetwork,
1051 Assert.AreEqual (false, sock.UseOnlyOverlappedIO, "UseOnlyOverlappedIODefault");
1057 // We need this because the Linux kernel in certain configurations
1058 // will end up rounding up the values passed on to the kernel
1059 // for socket send/receive timeouts.
1061 int Approximate (int target, int value)
1065 if (value > target-10 && value < target+10)
1071 public void UseOnlyOverlappedIOChange ()
1073 Socket sock = new Socket (AddressFamily.InterNetwork,
1077 sock.UseOnlyOverlappedIO = true;
1079 Assert.AreEqual (true, sock.UseOnlyOverlappedIO, "UseOnlyOverlappedIOChange");
1085 /* Should not throw an exception */
1086 public void UseOnlyOverlappedIOClosed ()
1088 Socket sock = new Socket (AddressFamily.InterNetwork,
1094 bool val = sock.UseOnlyOverlappedIO;
1098 public void SendTimeoutDefault ()
1100 Socket sock = new Socket (AddressFamily.InterNetwork,
1104 Assert.AreEqual (0, sock.SendTimeout, "SendTimeoutDefault");
1110 public void SendTimeoutChange ()
1112 Socket sock = new Socket (AddressFamily.InterNetwork,
1116 /* Should be rounded up to 500, according to
1117 * the MSDN docs, but the MS runtime doesn't
1119 sock.SendTimeout = 50;
1120 Assert.AreEqual (50, Approximate (50, sock.SendTimeout), "SendTimeoutChange #1");
1122 sock.SendTimeout = 2000;
1123 Assert.AreEqual (2000, Approximate (2000, sock.SendTimeout), "SendTimeoutChange #2");
1125 sock.SendTimeout = 0;
1126 Assert.AreEqual (0, Approximate (0, sock.SendTimeout), "SendTimeoutChange #3");
1128 /* Should be the same as setting 0 */
1129 sock.SendTimeout = -1;
1130 Assert.AreEqual (0, sock.SendTimeout, "SendTimeoutChange #4");
1132 sock.SendTimeout = 65536;
1133 Assert.AreEqual (65536, Approximate (65536, sock.SendTimeout), "SendTimeoutChange #5");
1136 sock.SendTimeout = -2;
1137 Assert.Fail ("SendTimeoutChange #8");
1138 } catch (ArgumentOutOfRangeException) {
1140 Assert.Fail ("SendTimeoutChange #9");
1147 [ExpectedException (typeof(ObjectDisposedException))]
1148 public void SendTimeoutClosed ()
1150 Socket sock = new Socket (AddressFamily.InterNetwork,
1156 int val = sock.SendTimeout;
1160 public void ReceiveTimeoutDefault ()
1162 Socket sock = new Socket (AddressFamily.InterNetwork,
1166 Assert.AreEqual (0, sock.ReceiveTimeout, "ReceiveTimeoutDefault");
1172 public void ReceiveTimeoutChange ()
1174 Socket sock = new Socket (AddressFamily.InterNetwork,
1178 sock.ReceiveTimeout = 50;
1179 Assert.AreEqual (50, Approximate (50, sock.ReceiveTimeout), "ReceiveTimeoutChange #1");
1181 sock.ReceiveTimeout = 2000;
1182 Assert.AreEqual (2000, Approximate (2000, sock.ReceiveTimeout), "ReceiveTimeoutChange #2");
1184 sock.ReceiveTimeout = 0;
1185 Assert.AreEqual (0, sock.ReceiveTimeout, "ReceiveTimeoutChange #3");
1187 /* Should be the same as setting 0 */
1188 sock.ReceiveTimeout = -1;
1189 Assert.AreEqual (0, sock.ReceiveTimeout, "ReceiveTimeoutChange #4");
1191 sock.ReceiveTimeout = 65536;
1192 Assert.AreEqual (65536, Approximate (65536, sock.ReceiveTimeout), "ReceiveTimeoutChange #5");
1195 sock.ReceiveTimeout = -2;
1196 Assert.Fail ("ReceiveTimeoutChange #8");
1197 } catch (ArgumentOutOfRangeException) {
1199 Assert.Fail ("ReceiveTimeoutChange #9");
1206 [ExpectedException (typeof(ObjectDisposedException))]
1207 public void ReceiveTimeoutClosed ()
1209 Socket sock = new Socket (AddressFamily.InterNetwork,
1215 int val = sock.ReceiveTimeout;
1219 public void NoDelayDefaultTcp ()
1221 Socket sock = new Socket (AddressFamily.InterNetwork,
1225 Assert.AreEqual (false, sock.NoDelay, "NoDelayDefaultTcp");
1231 public void NoDelayChangeTcp ()
1233 Socket sock = new Socket (AddressFamily.InterNetwork,
1237 sock.NoDelay = true;
1239 Assert.AreEqual (true, sock.NoDelay, "NoDelayChangeTcp");
1245 public void NoDelayDefaultUdp ()
1247 Socket sock = new Socket (AddressFamily.InterNetwork,
1252 bool val = sock.NoDelay;
1253 Assert.Fail ("NoDelayDefaultUdp #1");
1254 } catch (SocketException ex) {
1255 Assert.AreEqual (10042, ex.ErrorCode,
1256 "NoDelayDefaultUdp #2");
1258 Assert.Fail ("NoDelayDefaultUdp #3");
1265 public void NoDelayChangeUdp ()
1267 Socket sock = new Socket (AddressFamily.InterNetwork,
1272 sock.NoDelay = true;
1273 Assert.Fail ("NoDelayChangeUdp #1");
1274 } catch (SocketException ex) {
1275 Assert.AreEqual (10042, ex.ErrorCode,
1276 "NoDelayChangeUdp #2");
1278 Assert.Fail ("NoDelayChangeUdp #3");
1285 [ExpectedException (typeof(ObjectDisposedException))]
1286 public void NoDelayClosed ()
1288 Socket sock = new Socket (AddressFamily.InterNetwork,
1294 bool val = sock.NoDelay;
1297 static bool BAAccepted = false;
1298 static Socket BASocket = null;
1299 static ManualResetEvent BACalledBack = new ManualResetEvent (false);
1301 private static void BACallback (IAsyncResult asyncResult)
1303 Socket sock = (Socket)asyncResult.AsyncState;
1305 BASocket = sock.EndAccept (asyncResult);
1308 BACalledBack.Set ();
1312 [ExpectedException (typeof(InvalidOperationException))]
1313 public void BeginAcceptNotBound ()
1315 Socket sock = new Socket (AddressFamily.InterNetwork,
1319 sock.BeginAccept (BACallback, sock);
1325 [ExpectedException (typeof(InvalidOperationException))]
1326 public void BeginAcceptNotListening ()
1328 Socket sock = new Socket (AddressFamily.InterNetwork,
1332 sock.Bind (new IPEndPoint (IPAddress.Any, 1236));
1334 sock.BeginAccept (BACallback, sock);
1340 public void BeginAccept ()
1342 Socket sock = new Socket (AddressFamily.InterNetwork,
1345 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
1351 BACalledBack.Reset ();
1353 sock.BeginAccept (BACallback, sock);
1355 Socket conn = new Socket (AddressFamily.InterNetwork,
1361 if (BACalledBack.WaitOne (2000, false) == false) {
1362 Assert.Fail ("BeginAccept wait timed out");
1365 Assert.AreEqual (true, BAAccepted, "BeginAccept #1");
1366 Assert.AreEqual (true, BASocket.Connected, "BeginAccept #2");
1367 Assert.AreEqual (false, sock.Connected, "BeginAccept #3");
1368 Assert.AreEqual (true, conn.Connected, "BeginAccept #4");
1376 [ExpectedException (typeof(ObjectDisposedException))]
1377 public void BeginAcceptClosed ()
1379 Socket sock = new Socket (AddressFamily.InterNetwork,
1385 sock.BeginAccept (BACallback, sock);
1388 static bool BADAccepted = false;
1389 static Socket BADSocket = null;
1390 static byte[] BADBytes;
1391 static int BADByteCount;
1392 static ManualResetEvent BADCalledBack = new ManualResetEvent (false);
1394 private static void BADCallback (IAsyncResult asyncResult)
1396 Socket sock = (Socket)asyncResult.AsyncState;
1398 BADSocket = sock.EndAccept (out BADBytes,
1403 BADCalledBack.Set ();
1407 public void BeginAcceptData ()
1409 Socket sock = new Socket (AddressFamily.InterNetwork,
1412 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
1418 BADCalledBack.Reset ();
1420 sock.BeginAccept (256, BADCallback, sock);
1422 Socket conn = new Socket (AddressFamily.InterNetwork,
1425 byte[] send_bytes = new byte[] {10, 11, 12, 13};
1428 conn.Send (send_bytes);
1430 if (BADCalledBack.WaitOne (2000, false) == false) {
1431 Assert.Fail ("BeginAcceptData wait timed out");
1434 Assert.AreEqual (true, BADAccepted, "BeginAcceptData #1");
1435 Assert.AreEqual (true, BADSocket.Connected, "BeginAcceptData #2");
1436 Assert.AreEqual (false, sock.Connected, "BeginAcceptData #3");
1437 Assert.AreEqual (true, conn.Connected, "BeginAcceptData #4");
1438 Assert.AreEqual (send_bytes.Length, BADByteCount, "BeginAcceptData #5");
1440 /* The MS runtime gives the returned data in a
1441 * much bigger array. TODO: investigate
1442 * whether it the size correlates to the first
1443 * parameter in BeginAccept()
1445 Assert.IsFalse (BADBytes.Length == send_bytes.Length,
1446 "BeginAcceptData #6");
1448 for(int i = 0; i < send_bytes.Length; i++) {
1449 Assert.AreEqual (send_bytes[i], BADBytes[i], "BeginAcceptData #" + (i+7).ToString ());
1458 [ExpectedException (typeof(ObjectDisposedException))]
1459 public void BeginAcceptDataClosed ()
1461 Socket sock = new Socket (AddressFamily.InterNetwork,
1467 sock.BeginAccept (256, BADCallback, sock);
1471 public void BeginAcceptSocketUdp ()
1473 Socket sock = new Socket (AddressFamily.InterNetwork,
1476 Socket acc = new Socket (AddressFamily.InterNetwork,
1480 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
1487 sock.BeginAccept (acc, 256, BADCallback, sock);
1488 Assert.Fail ("BeginAcceptSocketUdp #1");
1489 } catch (SocketException ex) {
1490 Assert.AreEqual (10022, ex.ErrorCode, "BeginAcceptSocketUdp #2");
1492 Assert.Fail ("BeginAcceptSocketUdp #3");
1500 public void BeginAcceptSocketBound ()
1502 Socket sock = new Socket (AddressFamily.InterNetwork,
1505 Socket acc = new Socket (AddressFamily.InterNetwork,
1509 IPEndPoint ep1 = new IPEndPoint (IPAddress.Loopback,
1512 IPEndPoint ep2 = new IPEndPoint (IPAddress.Loopback,
1521 sock.BeginAccept (acc, 256, BADCallback, sock);
1522 Assert.Fail ("BeginAcceptSocketBound #1");
1523 } catch (InvalidOperationException) {
1525 Assert.Fail ("BeginAcceptSocketBound #2");
1533 public void BeginAcceptSocket ()
1535 Socket sock = new Socket (AddressFamily.InterNetwork,
1538 Socket acc = new Socket (AddressFamily.InterNetwork,
1542 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
1548 BADCalledBack.Reset ();
1550 sock.BeginAccept (acc, 256, BADCallback, sock);
1552 Socket conn = new Socket (AddressFamily.InterNetwork,
1555 byte[] send_bytes = new byte[] {10, 11, 12, 13};
1558 conn.Send (send_bytes);
1560 if (BADCalledBack.WaitOne (2000, false) == false) {
1561 Assert.Fail ("BeginAcceptSocket wait timed out");
1564 Assert.AreEqual (true, BADAccepted, "BeginAcceptSocket #1");
1565 Assert.AreEqual (true, BADSocket.Connected, "BeginAcceptSocket #2");
1566 Assert.AreEqual (false, sock.Connected, "BeginAcceptSocket #3");
1567 Assert.AreEqual (true, conn.Connected, "BeginAcceptSocket #4");
1568 Assert.AreEqual (send_bytes.Length, BADByteCount, "BeginAcceptSocket #5");
1569 Assert.AreEqual (AddressFamily.InterNetwork, acc.AddressFamily, "BeginAcceptSocket #6");
1570 Assert.AreEqual (SocketType.Stream, acc.SocketType, "BeginAcceptSocket #7");
1571 Assert.AreEqual (ProtocolType.Tcp, acc.ProtocolType, "BeginAcceptSocket #8");
1572 Assert.AreEqual (conn.LocalEndPoint, acc.RemoteEndPoint, "BeginAcceptSocket #9");
1574 /* The MS runtime gives the returned data in a
1575 * much bigger array. TODO: investigate
1576 * whether it the size correlates to the first
1577 * parameter in BeginAccept()
1579 Assert.IsFalse (BADBytes.Length == send_bytes.Length,
1580 "BeginAcceptSocket #10");
1582 for(int i = 0; i < send_bytes.Length; i++) {
1583 Assert.AreEqual (send_bytes[i], BADBytes[i], "BeginAcceptSocket #" + (i+11).ToString ());
1593 public void BeginAcceptSocketClosed ()
1595 Socket sock = new Socket (AddressFamily.InterNetwork,
1598 Socket acc = new Socket (AddressFamily.InterNetwork,
1605 sock.BeginAccept (acc, 256, BADCallback, null);
1606 Assert.Fail ("BeginAcceptSocketClosed #1");
1607 } catch (ObjectDisposedException) {
1609 Assert.Fail ("BeginAcceptSocketClosed #2");
1616 public void BeginAcceptSocketAccClosed ()
1618 Socket sock = new Socket (AddressFamily.InterNetwork,
1621 Socket acc = new Socket (AddressFamily.InterNetwork,
1624 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
1632 BADCalledBack.Reset ();
1635 sock.BeginAccept (acc, 256, BADCallback, null);
1636 Assert.Fail ("BeginAcceptSocketAccClosed #1");
1637 } catch (ObjectDisposedException) {
1639 Assert.Fail ("BeginAcceptSocketAccClosed #2");
1645 static bool BCConnected = false;
1646 static ManualResetEvent BCCalledBack = new ManualResetEvent (false);
1648 private static void BCCallback (IAsyncResult asyncResult)
1650 Socket sock = (Socket)asyncResult.AsyncState;
1653 sock.EndConnect (asyncResult);
1654 } catch (Exception e) {
1655 Console.WriteLine ("BCCallback exception:");
1656 Console.WriteLine (e);
1663 BCCalledBack.Set ();
1667 public void BeginConnectAddressPort ()
1669 Socket sock = new Socket (AddressFamily.InterNetwork,
1672 Socket listen = new Socket (AddressFamily.InterNetwork,
1675 IPAddress ip = IPAddress.Loopback;
1676 IPEndPoint ep = new IPEndPoint (ip, 1244);
1681 BCCalledBack.Reset ();
1683 BCConnected = false;
1685 sock.BeginConnect (ip, 1244, BCCallback, sock);
1687 if (BCCalledBack.WaitOne (2000, false) == false) {
1688 Assert.Fail ("BeginConnectAddressPort wait timed out");
1691 Assert.AreEqual (true, BCConnected, "BeginConnectAddressPort #1");
1698 public void BeginConnectAddressPortNull ()
1700 Socket sock = new Socket (AddressFamily.InterNetwork,
1703 IPAddress ip = null;
1706 sock.BeginConnect (ip, 1244, BCCallback,
1708 Assert.Fail ("BeginConnectAddressPortNull #1");
1709 } catch (ArgumentNullException) {
1711 Assert.Fail ("BeginConnectAddressPortNull #2");
1718 public void BeginConnectAddressPortListen ()
1720 Socket sock = new Socket (AddressFamily.InterNetwork,
1723 IPAddress ip = IPAddress.Loopback;
1724 IPEndPoint ep = new IPEndPoint (ip, 1245);
1730 sock.BeginConnect (ip, 1245, BCCallback, sock);
1731 Assert.Fail ("BeginConnectAddressPortListen #1");
1732 } catch (InvalidOperationException) {
1734 Assert.Fail ("BeginConnectAddressPortListen #2");
1741 [ExpectedException (typeof(ObjectDisposedException))]
1742 public void BeginConnectAddressPortClosed ()
1744 Socket sock = new Socket (AddressFamily.InterNetwork,
1747 IPAddress ip = IPAddress.Loopback;
1751 sock.BeginConnect (ip, 1244, BCCallback, sock);
1755 [Category ("NotOnMac")]
1757 * This is not a Mono bug.
1759 * By default, only 127.0.0.1 is enabled and you must explicitly
1760 * enable additional addresses using 'sudo ifconfig lo0 alias 127.0.0.1'.
1762 * I tested this on Mac OS 10.7.4; a 'ping 127.0.0.2' does not work
1763 * until I add that alias.
1766 public void BeginConnectMultiple ()
1768 Socket sock = new Socket (AddressFamily.InterNetwork,
1771 Socket listen = new Socket (AddressFamily.InterNetwork,
1774 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
1776 IPAddress[] ips = new IPAddress[4];
1778 ips[0] = IPAddress.Parse ("127.0.0.4");
1779 ips[1] = IPAddress.Parse ("127.0.0.3");
1780 ips[2] = IPAddress.Parse ("127.0.0.2");
1781 ips[3] = IPAddress.Parse ("127.0.0.1");
1786 BCCalledBack.Reset ();
1788 BCConnected = false;
1790 sock.BeginConnect (ips, 1246, BCCallback, sock);
1792 /* Longer wait here, because the ms runtime
1793 * takes a lot longer to not connect
1796 if (BCCalledBack.WaitOne (30000, false) == false) {
1797 Assert.Fail ("BeginConnectMultiple wait failed");
1801 Assert.IsTrue (BCCalledBack.WaitOne (30000), "#0");
1803 Assert.AreEqual (true, BCConnected, "BeginConnectMultiple #1");
1804 Assert.AreEqual (AddressFamily.InterNetwork, sock.RemoteEndPoint.AddressFamily, "BeginConnectMultiple #2");
1805 IPEndPoint remep = (IPEndPoint)sock.RemoteEndPoint;
1807 Assert.AreEqual (IPAddress.Loopback, remep.Address, "BeginConnectMultiple #2");
1814 public void BeginConnectMultiple2 ()
1816 Socket sock = new Socket (AddressFamily.InterNetwork,
1819 Socket listen = new Socket (AddressFamily.InterNetwork,
1823 // Need at least two addresses.
1824 var ips = Dns.GetHostAddresses (string.Empty);
1826 Assert.Ignore ("This test needs at least two IP addresses.");
1828 var allIps = new IPAddress [ips.Length + 1];
1829 allIps [0] = IPAddress.Loopback;
1830 ips.CopyTo (allIps, 1);
1833 * Only bind to the loopback interface, so all the non-loopback
1834 * IP addresses will fail. BeginConnect()/EndConnect() should
1835 * succeed it it can connect to at least one of the requested
1838 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 1246);
1843 BCCalledBack.Reset ();
1845 BCConnected = false;
1847 sock.BeginConnect (allIps, 1246, BCCallback, sock);
1849 /* Longer wait here, because the ms runtime
1850 * takes a lot longer to not connect
1852 if (BCCalledBack.WaitOne (10000, false) == false) {
1853 Assert.Fail ("BeginConnectMultiple2 wait failed");
1856 Assert.AreEqual (true, BCConnected, "BeginConnectMultiple2 #1");
1857 Assert.AreEqual (AddressFamily.InterNetwork, sock.RemoteEndPoint.AddressFamily, "BeginConnectMultiple2 #2");
1858 IPEndPoint remep = (IPEndPoint)sock.RemoteEndPoint;
1860 Assert.AreEqual (IPAddress.Loopback, remep.Address, "BeginConnectMultiple2 #2");
1868 public void BeginConnectMultipleNull ()
1870 Socket sock = new Socket (AddressFamily.InterNetwork,
1873 IPAddress[] ips = null;
1876 sock.BeginConnect (ips, 1246, BCCallback,
1878 Assert.Fail ("BeginConnectMultipleNull #1");
1879 } catch (ArgumentNullException) {
1881 Assert.Fail ("BeginConnectMultipleNull #2");
1888 public void BeginConnectMultipleListen ()
1890 Socket sock = new Socket (AddressFamily.InterNetwork,
1893 IPAddress[] ips = new IPAddress[4];
1894 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
1897 ips[0] = IPAddress.Parse ("127.0.0.4");
1898 ips[1] = IPAddress.Parse ("127.0.0.3");
1899 ips[2] = IPAddress.Parse ("127.0.0.2");
1900 ips[3] = IPAddress.Parse ("127.0.0.1");
1906 sock.BeginConnect (ips, 1247, BCCallback,
1908 Assert.Fail ("BeginConnectMultipleListen #1");
1909 } catch (InvalidOperationException) {
1911 Assert.Fail ("BeginConnectMultipleListen #2");
1918 [ExpectedException (typeof(ObjectDisposedException))]
1919 public void BeginConnectMultipleClosed ()
1921 Socket sock = new Socket (AddressFamily.InterNetwork,
1924 IPAddress[] ips = new IPAddress[4];
1926 ips[0] = IPAddress.Parse ("127.0.0.4");
1927 ips[1] = IPAddress.Parse ("127.0.0.3");
1928 ips[2] = IPAddress.Parse ("127.0.0.2");
1929 ips[3] = IPAddress.Parse ("127.0.0.1");
1933 sock.BeginConnect (ips, 1247, BCCallback, sock);
1937 public void BeginConnectHostPortNull ()
1939 Socket sock = new Socket (AddressFamily.InterNetwork,
1944 sock.BeginConnect ((string)null, 0,
1946 Assert.Fail ("BeginConnectHostPort #1");
1947 } catch (ArgumentNullException) {
1949 Assert.Fail ("BeginConnectHostPort #2");
1956 public void BeginConnectHostPortListen ()
1958 Socket sock = new Socket (AddressFamily.InterNetwork,
1961 IPAddress ip = IPAddress.Loopback;
1962 IPEndPoint ep = new IPEndPoint (ip, 1248);
1968 sock.BeginConnect ("localhost", 1248,
1970 Assert.Fail ("BeginConnectHostPortListen #1");
1971 } catch (InvalidOperationException) {
1973 Assert.Fail ("BeginConnectHostPortListen #2");
1980 [Category ("NotWorking")] // Need to pick a non-IP AddressFamily that "works" on both mono and ms, this one only works on ms
1981 public void BeginConnectHostPortNotIP ()
1983 Socket sock = new Socket (AddressFamily.NetBios,
1984 SocketType.Seqpacket,
1985 ProtocolType.Unspecified);
1988 sock.BeginConnect ("localhost", 0, BCCallback,
1990 Assert.Fail ("BeginConnectHostPortNotIP #1");
1991 } catch (NotSupportedException) {
1993 Assert.Fail ("BeginConnectHostPortNotIP #2");
2000 [ExpectedException (typeof(ObjectDisposedException))]
2001 public void BeginConnectHostPortClosed ()
2003 Socket sock = new Socket (AddressFamily.InterNetwork,
2009 sock.BeginConnect ("localhost", 0, BCCallback, sock);
2012 static bool BDDisconnected = false;
2013 static ManualResetEvent BDCalledBack = new ManualResetEvent (false);
2015 private static void BDCallback (IAsyncResult asyncResult)
2017 Socket sock = (Socket)asyncResult.AsyncState;
2019 sock.EndDisconnect (asyncResult);
2020 BDDisconnected = true;
2022 BDCalledBack.Set ();
2026 [Category ("NotDotNet")] // "Needs XP or later"
2027 public void BeginDisconnect ()
2029 Socket sock = new Socket (AddressFamily.InterNetwork,
2032 Socket listen = new Socket (AddressFamily.InterNetwork,
2035 IPAddress ip = IPAddress.Loopback;
2036 IPEndPoint ep = new IPEndPoint (ip, 1254);
2041 sock.Connect (ip, 1254);
2043 Assert.AreEqual (true, sock.Connected, "BeginDisconnect #1");
2045 sock.Shutdown (SocketShutdown.Both);
2047 BDCalledBack.Reset ();
2048 BDDisconnected = false;
2050 sock.BeginDisconnect (false, BDCallback, sock);
2052 if (BDCalledBack.WaitOne (2000, false) == false) {
2053 Assert.Fail ("BeginDisconnect wait timed out");
2056 Assert.AreEqual (true, BDDisconnected, "BeginDisconnect #2");
2057 Assert.AreEqual (false, sock.Connected, "BeginDisconnect #3");
2064 public void BeginReceiveSocketError ()
2069 public void BeginReceiveGeneric ()
2074 public void BeginReceiveGenericSocketError ()
2078 private static void BSCallback (IAsyncResult asyncResult)
2080 Socket sock = (Socket)asyncResult.AsyncState;
2082 sock.EndSend (asyncResult);
2086 public void BeginSendNotConnected ()
2088 Socket sock = new Socket (AddressFamily.InterNetwork,
2092 byte[] send_bytes = new byte[] {10, 11, 12, 13};
2095 sock.BeginSend (send_bytes, 0,
2097 SocketFlags.None, BSCallback,
2099 Assert.Fail ("BeginSendNotConnected #1");
2100 } catch (SocketException ex) {
2101 Assert.AreEqual (10057, ex.ErrorCode, "BeginSendNotConnected #2");
2103 Assert.Fail ("BeginSendNotConnected #3");
2110 public void BeginSendSocketError ()
2115 public void BeginSendGeneric ()
2120 public void BeginSendGenericSocketError ()
2125 public void BindTwice ()
2127 Socket sock = new Socket (AddressFamily.InterNetwork,
2130 IPEndPoint ep1 = new IPEndPoint (IPAddress.Loopback,
2132 IPEndPoint ep2 = new IPEndPoint (IPAddress.Loopback,
2139 Assert.Fail ("BindTwice #1");
2140 } catch (SocketException ex) {
2141 Assert.AreEqual (10022, ex.ErrorCode, "BindTwice #2");
2143 Assert.Fail ("BindTwice #3");
2150 public void Close ()
2152 Socket sock = new Socket (AddressFamily.InterNetwork,
2155 Socket listen = new Socket (AddressFamily.InterNetwork,
2158 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
2166 Assert.AreEqual (true, sock.Connected, "Close #1");
2170 Thread.Sleep (3000);
2172 Assert.AreEqual (false, sock.Connected, "Close #2");
2178 public void ConnectAddressPort ()
2180 Socket sock = new Socket (AddressFamily.InterNetwork,
2183 Socket listen = new Socket (AddressFamily.InterNetwork,
2186 IPAddress ip = IPAddress.Loopback;
2187 IPEndPoint ep = new IPEndPoint (ip, 1249);
2192 sock.Connect (ip, 1249);
2194 Assert.AreEqual (true, sock.Connected, "ConnectAddressPort #1");
2201 public void ConnectAddressPortNull ()
2203 Socket sock = new Socket (AddressFamily.InterNetwork,
2206 IPAddress ip = null;
2209 sock.Connect (ip, 1249);
2210 Assert.Fail ("ConnectAddressPortNull #1");
2211 } catch (ArgumentNullException) {
2213 Assert.Fail ("ConnectAddressPortNull #2");
2220 public void ConnectAddressPortListen ()
2222 Socket sock = new Socket (AddressFamily.InterNetwork,
2225 IPAddress ip = IPAddress.Loopback;
2226 IPEndPoint ep = new IPEndPoint (ip, 1250);
2232 sock.Connect (ip, 1250);
2233 Assert.Fail ("ConnectAddressPortListen #1");
2234 } catch (InvalidOperationException) {
2236 Assert.Fail ("ConnectAddressPortListen #2");
2243 [ExpectedException (typeof(ObjectDisposedException))]
2244 public void ConnectAddressPortClosed ()
2246 Socket sock = new Socket (AddressFamily.InterNetwork,
2249 IPAddress ip = IPAddress.Loopback;
2253 sock.Connect (ip, 1250);
2257 [Category ("NotOnMac")] // MacOSX trashes the fd after the failed connect attempt to 127.0.0.4
2259 * This is not a Mono bug.
2261 * By default, only 127.0.0.1 is enabled and you must explicitly
2262 * enable additional addresses using 'sudo ifconfig lo0 alias 127.0.0.1'.
2264 * I tested this on Mac OS 10.7.4; a 'ping 127.0.0.2' does not work
2265 * until I add that alias.
2267 * However, after doing so, Mac OS treats these as separate addresses, ie. attempting
2268 * to connect to 127.0.0.4 yields a connection refused.
2270 * When using Connect(), the .NET runtime also throws an exception if connecting to
2271 * any of the IP addresses fails. This is different with BeginConnect()/EndConnect()
2272 * which succeeds when it can connect to at least one of the addresses.
2275 public void ConnectMultiple ()
2277 Socket sock = new Socket (AddressFamily.InterNetwork,
2280 Socket listen = new Socket (AddressFamily.InterNetwork,
2283 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
2285 IPAddress[] ips = new IPAddress[4];
2287 ips[0] = IPAddress.Parse ("127.0.0.4");
2288 ips[1] = IPAddress.Parse ("127.0.0.3");
2289 ips[2] = IPAddress.Parse ("127.0.0.2");
2290 ips[3] = IPAddress.Parse ("127.0.0.1");
2295 sock.Connect (ips, 1251);
2297 Assert.AreEqual (true, sock.Connected, "ConnectMultiple #1");
2298 Assert.AreEqual (AddressFamily.InterNetwork, sock.RemoteEndPoint.AddressFamily, "ConnectMultiple #2");
2299 IPEndPoint remep = (IPEndPoint)sock.RemoteEndPoint;
2301 Assert.AreEqual (IPAddress.Loopback, remep.Address, "ConnectMultiple #2");
2308 public void ConnectMultiple2 ()
2310 Socket sock = new Socket (AddressFamily.InterNetwork,
2313 Socket listen = new Socket (AddressFamily.InterNetwork,
2317 // Need at least two addresses.
2318 var ips = Dns.GetHostAddresses (string.Empty);
2320 Assert.Ignore ("This test needs at least two IP addresses.");
2322 var allIps = new IPAddress [ips.Length + 1];
2323 allIps [0] = IPAddress.Loopback;
2324 ips.CopyTo (allIps, 1);
2327 * Bind to IPAddress.Any; Connect() will fail unless it can
2328 * connect to all the addresses in allIps.
2330 IPEndPoint ep = new IPEndPoint (IPAddress.Any, 1251);
2335 sock.Connect (allIps, 1251);
2337 Assert.AreEqual (true, sock.Connected, "ConnectMultiple2 #1");
2338 Assert.AreEqual (AddressFamily.InterNetwork, sock.RemoteEndPoint.AddressFamily, "ConnectMultiple2 #2");
2339 IPEndPoint remep = (IPEndPoint)sock.RemoteEndPoint;
2341 Assert.AreEqual (IPAddress.Loopback, remep.Address, "ConnectMultiple2 #3");
2348 public void ConnectMultipleNull ()
2350 Socket sock = new Socket (AddressFamily.InterNetwork,
2353 IPAddress[] ips = null;
2356 sock.Connect (ips, 1251);
2357 Assert.Fail ("ConnectMultipleNull #1");
2358 } catch (ArgumentNullException) {
2360 Assert.Fail ("ConnectMultipleNull #2");
2367 public void ConnectMultipleListen ()
2369 Socket sock = new Socket (AddressFamily.InterNetwork,
2372 IPAddress[] ips = new IPAddress[4];
2373 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
2376 ips[0] = IPAddress.Parse ("127.0.0.4");
2377 ips[1] = IPAddress.Parse ("127.0.0.3");
2378 ips[2] = IPAddress.Parse ("127.0.0.2");
2379 ips[3] = IPAddress.Parse ("127.0.0.1");
2385 sock.Connect (ips, 1252);
2386 Assert.Fail ("ConnectMultipleListen #1");
2387 } catch (InvalidOperationException) {
2389 Assert.Fail ("ConnectMultipleListen #2");
2396 [ExpectedException (typeof(ObjectDisposedException))]
2397 public void ConnectMultipleClosed ()
2399 Socket sock = new Socket (AddressFamily.InterNetwork,
2402 IPAddress[] ips = new IPAddress[4];
2404 ips[0] = IPAddress.Parse ("127.0.0.4");
2405 ips[1] = IPAddress.Parse ("127.0.0.3");
2406 ips[2] = IPAddress.Parse ("127.0.0.2");
2407 ips[3] = IPAddress.Parse ("127.0.0.1");
2411 sock.Connect (ips, 1252);
2415 public void ConnectHostPortNull ()
2417 Socket sock = new Socket (AddressFamily.InterNetwork,
2422 sock.Connect ((string)null, 0);
2423 Assert.Fail ("ConnectHostPort #1");
2424 } catch (ArgumentNullException) {
2426 Assert.Fail ("ConnectHostPort #2");
2433 public void ConnectHostPortListen ()
2435 Socket sock = new Socket (AddressFamily.InterNetwork,
2438 IPAddress ip = IPAddress.Loopback;
2439 IPEndPoint ep = new IPEndPoint (ip, 1253);
2445 sock.Connect ("localhost", 1253);
2446 Assert.Fail ("ConnectHostPortListen #1");
2447 } catch (InvalidOperationException) {
2449 Assert.Fail ("ConnectHostPortListen #2");
2456 [Category ("NotWorking")] // Need to pick a non-IP AddressFamily that "works" on both mono and ms, this one only works on ms
2457 public void ConnectHostPortNotIP ()
2459 Socket sock = new Socket (AddressFamily.NetBios,
2460 SocketType.Seqpacket,
2461 ProtocolType.Unspecified);
2464 sock.Connect ("localhost", 0);
2465 Assert.Fail ("ConnectHostPortNotIP #1");
2466 } catch (NotSupportedException) {
2468 Assert.Fail ("ConnectHostPortNotIP #2");
2475 [ExpectedException (typeof(ObjectDisposedException))]
2476 public void ConnectHostPortClosed ()
2478 Socket sock = new Socket (AddressFamily.InterNetwork,
2484 sock.Connect ("localhost", 0);
2488 [Category ("NotDotNet")] // "Needs XP or later"
2489 public void Disconnect ()
2491 Socket sock = new Socket (AddressFamily.InterNetwork,
2494 Socket listen = new Socket (AddressFamily.InterNetwork,
2497 IPAddress ip = IPAddress.Loopback;
2498 IPEndPoint ep = new IPEndPoint (ip, 1255);
2503 sock.Connect (ip, 1255);
2505 Assert.AreEqual (true, sock.Connected, "Disconnect #1");
2507 sock.Shutdown (SocketShutdown.Both);
2509 sock.Disconnect (false);
2511 Assert.AreEqual (false, sock.Connected, "BeginDisconnect #3");
2518 public void DuplicateAndClose ()
2523 public void IOControl ()
2528 public void TestDefaultsDualMode ()
2530 using (var socket = new Socket (AddressFamily.InterNetworkV6, SocketType.Stream, ProtocolType.Tcp)){
2531 Assert.IsTrue (socket.DualMode, "In Mono, DualMode must be true when constructing InterNetworkV6 sockets");
2534 using (var socket = new Socket (SocketType.Stream, ProtocolType.Tcp)){
2535 Assert.AreEqual (AddressFamily.InterNetworkV6, socket.AddressFamily, "When creating sockets of type stream/tcp, the address family should be InterNetworkV6");
2536 Assert.IsTrue (socket.DualMode, "In Mono, DualMode must be true when constructing InterNetworkV6 sockets");
2538 socket.DualMode = false;
2540 Assert.IsFalse (socket.DualMode, "Setting of DualSocket should turn DualSockets off");
2546 public void ReceiveGeneric ()
2550 IPEndPoint endpoint = new IPEndPoint(IPAddress.Loopback, 1258);
2552 Socket listensock = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
2553 listensock.Bind (endpoint);
2554 listensock.Listen(1);
2556 Socket sendsock = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
2557 sendsock.Connect(endpoint);
2559 Socket clientsock = listensock.Accept();
2561 byte[] sendbuf = new byte[256];
2563 for(i = 0; i < 256; i++) {
2564 sendbuf[i] = (byte)i;
2566 for (i = 4; i < 6; i++) {
2567 Assert.AreEqual (sendbuf[i], (byte)i,
2568 "#1/" + i.ToString());
2572 sendsock.Send (sendbuf, 0, 256, SocketFlags.None,
2576 byte[] recvbuf = new byte[256];
2577 List<ArraySegment<byte>> recvbuflist = new List<ArraySegment<byte>>(2);
2578 recvbuflist.Add(new ArraySegment<byte>(recvbuf, 4, 2));
2579 recvbuflist.Add(new ArraySegment<byte>(recvbuf, 20, 230));
2581 clientsock.Receive (recvbuflist);
2583 /* recvbuf should now hold the first 2 bytes
2584 * of sendbuf from pos 4, and the next 230
2585 * bytes of sendbuf from pos 20
2588 for (i = 0; i < 2; i++) {
2589 Assert.AreEqual (sendbuf[i], recvbuf[i + 4],
2590 "#2/" + i.ToString());
2592 for (i = 2; i < 232; i++) {
2593 Assert.AreEqual (sendbuf[i], recvbuf[i + 18],
2594 "#2/" + i.ToString());
2598 clientsock.Close ();
2599 listensock.Close ();
2603 public void SendGeneric ()
2607 IPEndPoint endpoint = new IPEndPoint(IPAddress.Loopback, 1259);
2609 Socket listensock = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
2610 listensock.Bind (endpoint);
2611 listensock.Listen(1);
2613 Socket sendsock = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
2614 sendsock.Connect(endpoint);
2616 Socket clientsock = listensock.Accept();
2618 byte[] sendbuf = new byte[256];
2619 List<ArraySegment<byte>> sendbuflist = new List<ArraySegment<byte>>(2);
2621 sendbuflist.Add(new ArraySegment<byte>(sendbuf, 4, 2));
2622 sendbuflist.Add(new ArraySegment<byte>(sendbuf, 20, 230));
2624 for(i = 0; i < 256; i++) {
2625 sendbuf[i] = (byte)i;
2627 for (i = 4; i < 6; i++) {
2628 Assert.AreEqual (sendbuf[i], (byte)i,
2629 "#1/" + i.ToString());
2633 sendsock.Send (sendbuflist, SocketFlags.None, out err);
2636 byte[] recvbuf = new byte[256];
2638 clientsock.Receive (recvbuf);
2640 /* The first 2 bytes of recvbuf should now
2641 * hold 2 bytes of sendbuf from pos 4, and the
2642 * next 230 bytes of recvbuf should be sendbuf
2646 for (i = 0; i < 2; i++) {
2647 Assert.AreEqual (recvbuf[i], sendbuf[i + 4],
2648 "#2/" + i.ToString());
2650 for (i = 2; i < 232; i++) {
2651 Assert.AreEqual (recvbuf[i], sendbuf[i + 18],
2652 "#2/" + i.ToString());
2656 clientsock.Close ();
2657 listensock.Close ();
2661 public void ListenNotBound ()
2663 Socket sock = new Socket (AddressFamily.InterNetwork,
2669 Assert.Fail ("ListenNotBound #1");
2670 } catch (SocketException ex) {
2671 Assert.AreEqual (10022, ex.ErrorCode, "ListenNotBound #2");
2673 Assert.Fail ("ListenNotBound #3");
2679 static Socket CWRSocket;
2680 static bool CWRReceiving = true;
2681 static ManualResetEvent CWRReady = new ManualResetEvent (false);
2683 private static void CWRReceiveThread ()
2685 byte[] buf = new byte[256];
2688 CWRSocket.Receive (buf);
2689 } catch (SocketException) {
2690 CWRReceiving = false;
2697 public void CloseWhileReceiving ()
2699 CWRSocket = new Socket (AddressFamily.InterNetwork,
2702 CWRSocket.Bind (new IPEndPoint (IPAddress.Loopback,
2705 Thread recv_thread = new Thread (new ThreadStart (CWRReceiveThread));
2707 recv_thread.Start ();
2708 Thread.Sleep (250); /* Wait for the thread to be already receiving */
2711 if (CWRReady.WaitOne (1000, false) == false) {
2712 Assert.Fail ("CloseWhileReceiving wait timed out");
2715 Assert.IsFalse (CWRReceiving);
2718 static bool RRCLastRead = false;
2719 static ManualResetEvent RRCReady = new ManualResetEvent (false);
2721 private static void RRCClientThread ()
2723 byte[] bytes = new byte[8];
2726 Socket sock = new Socket (AddressFamily.InterNetwork,
2729 sock.Connect (new IPEndPoint (IPAddress.Loopback,
2732 NetworkStream stream = new NetworkStream (sock);
2734 readbyte = stream.ReadByte ();
2735 Assert.AreEqual (0, readbyte, "ReceiveRemoteClosed #1");
2737 stream.Read (bytes, 0, 0);
2739 readbyte = stream.ReadByte ();
2740 Assert.AreEqual (0, readbyte, "ReceiveRemoteClosed #2");
2742 stream.Read (bytes, 0, 0);
2744 readbyte = stream.ReadByte ();
2745 Assert.AreEqual (-1, readbyte, "ReceiveRemoteClosed #3");
2753 [Test] // Receive (Byte [])
2754 public void Receive1_Buffer_Null ()
2756 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
2760 s.Receive ((byte []) null);
2762 } catch (ArgumentNullException ex) {
2763 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
2764 Assert.IsNull (ex.InnerException, "#3");
2765 Assert.IsNotNull (ex.Message, "#4");
2766 Assert.AreEqual ("buffer", ex.ParamName, "#5");
2772 [Test] // Receive (Byte [])
2773 public void Receive1_Socket_Closed ()
2775 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
2780 s.Receive ((byte []) null);
2782 } catch (ObjectDisposedException ex) {
2783 // Cannot access a disposed object
2784 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
2785 Assert.IsNull (ex.InnerException, "#3");
2786 Assert.IsNotNull (ex.Message, "#4");
2787 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
2791 [Test] // Receive (Byte [], SocketFlags)
2792 public void Receive2_Buffer_Null ()
2794 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
2798 s.Receive ((byte []) null, (SocketFlags) 666);
2800 } catch (ArgumentNullException ex) {
2801 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
2802 Assert.IsNull (ex.InnerException, "#3");
2803 Assert.IsNotNull (ex.Message, "#4");
2804 Assert.AreEqual ("buffer", ex.ParamName, "#5");
2810 [Test] // Receive (Byte [], SocketFlags)
2811 public void Receive2_Socket_Closed ()
2813 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
2818 s.Receive ((byte []) null, (SocketFlags) 666);
2820 } catch (ObjectDisposedException ex) {
2821 // Cannot access a disposed object
2822 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
2823 Assert.IsNull (ex.InnerException, "#3");
2824 Assert.IsNotNull (ex.Message, "#4");
2825 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
2829 [Test] // Receive (Byte [], Int32, SocketFlags)
2830 public void Receive3_Buffer_Null ()
2832 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
2836 s.Receive ((byte []) null, 0, (SocketFlags) 666);
2838 } catch (ArgumentNullException ex) {
2839 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
2840 Assert.IsNull (ex.InnerException, "#3");
2841 Assert.IsNotNull (ex.Message, "#4");
2842 Assert.AreEqual ("buffer", ex.ParamName, "#5");
2848 [Test] // Receive (Byte [], Int32, SocketFlags)
2849 public void Receive3_Socket_Closed ()
2851 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
2856 s.Receive ((byte []) null, 0, (SocketFlags) 666);
2858 } catch (ObjectDisposedException ex) {
2859 // Cannot access a disposed object
2860 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
2861 Assert.IsNull (ex.InnerException, "#3");
2862 Assert.IsNotNull (ex.Message, "#4");
2863 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
2867 [Test] // Receive (Byte [], Int32, Int32, SocketFlags)
2868 public void Receive4_Buffer_Null ()
2870 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
2874 s.Receive ((byte []) null, 0, 0, (SocketFlags) 666);
2876 } catch (ArgumentNullException ex) {
2877 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
2878 Assert.IsNull (ex.InnerException, "#3");
2879 Assert.IsNotNull (ex.Message, "#4");
2880 Assert.AreEqual ("buffer", ex.ParamName, "#5");
2886 [Test] // Receive (Byte [], Int32, Int32, SocketFlags)
2887 public void Receive4_Socket_Closed ()
2889 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
2894 s.Receive ((byte []) null, 0, 0, (SocketFlags) 666);
2896 } catch (ObjectDisposedException ex) {
2897 // Cannot access a disposed object
2898 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
2899 Assert.IsNull (ex.InnerException, "#3");
2900 Assert.IsNotNull (ex.Message, "#4");
2901 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
2905 [Test] // Receive (Byte [], Int32, Int32, SocketFlags, out SocketError)
2906 public void Receive5_Buffer_Null ()
2908 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
2913 s.Receive ((byte []) null, 0, 0, SocketFlags.None, out error);
2915 } catch (ArgumentNullException ex) {
2916 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
2917 Assert.IsNull (ex.InnerException, "#3");
2918 Assert.IsNotNull (ex.Message, "#4");
2919 Assert.AreEqual ("buffer", ex.ParamName, "#5");
2925 [Test] // Receive (Byte [], Int32, Int32, SocketFlags, out SocketError)
2926 public void Receive5_Socket_Closed ()
2928 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
2934 s.Receive ((byte []) null, 0, 0, SocketFlags.None, out error);
2936 } catch (ObjectDisposedException ex) {
2937 // Cannot access a disposed object
2938 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
2939 Assert.IsNull (ex.InnerException, "#3");
2940 Assert.IsNotNull (ex.Message, "#4");
2941 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
2945 [Test] // Receive (IList<ArraySegment<Byte>>)
2946 public void Receive6_Buffers_Null ()
2948 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
2952 s.Receive ((IList<ArraySegment<byte>>) null);
2954 } catch (ArgumentNullException ex) {
2955 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
2956 Assert.IsNull (ex.InnerException, "#3");
2957 Assert.IsNotNull (ex.Message, "#4");
2958 Assert.AreEqual ("buffers", ex.ParamName, "#5");
2964 [Test] // Receive (IList<ArraySegment<Byte>>)
2965 public void Receive6_Socket_Closed ()
2967 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
2972 s.Receive ((IList<ArraySegment<byte>>) null);
2974 } catch (ObjectDisposedException ex) {
2975 // Cannot access a disposed object
2976 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
2977 Assert.IsNull (ex.InnerException, "#3");
2978 Assert.IsNotNull (ex.Message, "#4");
2979 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
2983 [Test] // Receive (IList<ArraySegment<Byte>>, SocketFlags)
2984 public void Receive7_Buffers_Null ()
2986 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
2990 s.Receive ((IList<ArraySegment<byte>>) null, (SocketFlags) 666);
2992 } catch (ArgumentNullException ex) {
2993 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
2994 Assert.IsNull (ex.InnerException, "#3");
2995 Assert.IsNotNull (ex.Message, "#4");
2996 Assert.AreEqual ("buffers", ex.ParamName, "#5");
3002 [Test] // Receive (IList<ArraySegment<Byte>>, SocketFlags)
3003 public void Receive7_Socket_Closed ()
3005 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3010 s.Receive ((IList<ArraySegment<byte>>) null, (SocketFlags) 666);
3012 } catch (ObjectDisposedException ex) {
3013 // Cannot access a disposed object
3014 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
3015 Assert.IsNull (ex.InnerException, "#3");
3016 Assert.IsNotNull (ex.Message, "#4");
3017 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
3021 [Test] // Receive (IList<ArraySegment<Byte>>, SocketFlags, out SocketError)
3022 public void Receive8_Buffers_Null ()
3024 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3029 s.Receive ((IList<ArraySegment<byte>>) null, (SocketFlags) 666,
3032 } catch (ArgumentNullException ex) {
3033 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
3034 Assert.IsNull (ex.InnerException, "#3");
3035 Assert.IsNotNull (ex.Message, "#4");
3036 Assert.AreEqual ("buffers", ex.ParamName, "#5");
3042 [Test] // Receive (IList<ArraySegment<Byte>>, SocketFlags, out SocketError)
3043 public void Receive8_Socket_Closed ()
3045 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3051 s.Receive ((IList<ArraySegment<byte>>) null, (SocketFlags) 666,
3054 } catch (ObjectDisposedException ex) {
3055 // Cannot access a disposed object
3056 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
3057 Assert.IsNull (ex.InnerException, "#3");
3058 Assert.IsNotNull (ex.Message, "#4");
3059 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
3065 [Test] // ReceiveFrom (Byte [], ref EndPoint)
3066 public void ReceiveFrom1_Buffer_Null ()
3068 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3071 EndPoint remoteEP = new IPEndPoint (IPAddress.Loopback, 8001);
3073 s.ReceiveFrom ((Byte []) null, ref remoteEP);
3075 } catch (ArgumentNullException ex) {
3076 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
3077 Assert.IsNull (ex.InnerException, "#3");
3078 Assert.IsNotNull (ex.Message, "#4");
3079 Assert.AreEqual ("buffer", ex.ParamName, "#5");
3085 [Test] // ReceiveFrom (Byte [], ref EndPoint)
3086 public void ReceiveFrom1_RemoteEP_Null ()
3088 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3091 byte [] buffer = new byte [0];
3092 EndPoint remoteEP = null;
3094 s.ReceiveFrom (buffer, ref remoteEP);
3096 } catch (ArgumentNullException ex) {
3097 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
3098 Assert.IsNull (ex.InnerException, "#3");
3099 Assert.IsNotNull (ex.Message, "#4");
3100 Assert.AreEqual ("remoteEP", ex.ParamName, "#5");
3106 [Test] // ReceiveFrom (Byte [], ref EndPoint)
3107 public void ReceiveFrom1_Socket_Closed ()
3109 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3113 EndPoint remoteEP = new IPEndPoint (IPAddress.Loopback, 8001);
3115 s.ReceiveFrom ((Byte []) null, ref remoteEP);
3117 } catch (ObjectDisposedException ex) {
3118 // Cannot access a disposed object
3119 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
3120 Assert.IsNull (ex.InnerException, "#3");
3121 Assert.IsNotNull (ex.Message, "#4");
3122 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
3126 [Test] // ReceiveFrom (Byte [], SocketFlags, ref EndPoint)
3127 public void ReceiveFrom2_Buffer_Null ()
3129 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3132 EndPoint remoteEP = new IPEndPoint (IPAddress.Loopback, 8001);
3134 s.ReceiveFrom ((Byte []) null, (SocketFlags) 666, ref remoteEP);
3136 } catch (ArgumentNullException ex) {
3137 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
3138 Assert.IsNull (ex.InnerException, "#3");
3139 Assert.IsNotNull (ex.Message, "#4");
3140 Assert.AreEqual ("buffer", ex.ParamName, "#5");
3146 [Test] // ReceiveFrom (Byte [], SocketFlags, ref EndPoint)
3147 public void ReceiveFrom2_RemoteEP_Null ()
3149 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3152 byte [] buffer = new byte [5];
3153 EndPoint remoteEP = null;
3155 s.ReceiveFrom (buffer, (SocketFlags) 666, ref remoteEP);
3157 } catch (ArgumentNullException ex) {
3158 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
3159 Assert.IsNull (ex.InnerException, "#3");
3160 Assert.IsNotNull (ex.Message, "#4");
3161 Assert.AreEqual ("remoteEP", ex.ParamName, "#5");
3167 [Test] // ReceiveFrom (Byte [], SocketFlags, ref EndPoint)
3168 public void ReceiveFrom2_Socket_Closed ()
3170 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3174 EndPoint remoteEP = new IPEndPoint (IPAddress.Loopback, 8001);
3176 s.ReceiveFrom ((Byte []) null, (SocketFlags) 666, ref remoteEP);
3178 } catch (ObjectDisposedException ex) {
3179 // Cannot access a disposed object
3180 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
3181 Assert.IsNull (ex.InnerException, "#3");
3182 Assert.IsNotNull (ex.Message, "#4");
3183 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
3187 [Test] // ReceiveFrom (Byte [], Int32, SocketFlags, ref EndPoint)
3188 public void ReceiveFrom3_Buffer_Null ()
3190 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3193 EndPoint remoteEP = new IPEndPoint (IPAddress.Loopback, 8001);
3195 s.ReceiveFrom ((Byte []) null, 0, (SocketFlags) 666,
3198 } catch (ArgumentNullException ex) {
3199 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
3200 Assert.IsNull (ex.InnerException, "#3");
3201 Assert.IsNotNull (ex.Message, "#4");
3202 Assert.AreEqual ("buffer", ex.ParamName, "#5");
3208 [Test] // ReceiveFrom (Byte [], Int32, SocketFlags, ref EndPoint)
3209 public void ReceiveFrom3_RemoteEP_Null ()
3211 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3214 byte [] buffer = new byte [5];
3215 EndPoint remoteEP = null;
3217 s.ReceiveFrom (buffer, buffer.Length, (SocketFlags) 666, ref remoteEP);
3219 } catch (ArgumentNullException ex) {
3220 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
3221 Assert.IsNull (ex.InnerException, "#3");
3222 Assert.IsNotNull (ex.Message, "#4");
3223 Assert.AreEqual ("remoteEP", ex.ParamName, "#5");
3229 [Test] // ReceiveFrom (Byte [], Int32, SocketFlags, ref EndPoint)
3230 public void ReceiveFrom3_Size_OutOfRange ()
3233 byte [] buffer = new byte [5];
3234 EndPoint remoteEP = new IPEndPoint (IPAddress.Loopback, 8001);
3237 s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3240 s.ReceiveFrom (buffer, -1, (SocketFlags) 666, ref remoteEP);
3241 Assert.Fail ("#A1");
3242 } catch (ArgumentOutOfRangeException ex) {
3243 // Specified argument was out of the range of valid values
3244 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#A2");
3245 Assert.IsNull (ex.InnerException, "#A3");
3246 Assert.IsNotNull (ex.Message, "#A4");
3247 Assert.AreEqual ("size", ex.ParamName, "#A5");
3252 // size > buffer length
3253 s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3256 s.ReceiveFrom (buffer, (buffer.Length + 1), (SocketFlags) 666,
3258 Assert.Fail ("#B1");
3259 } catch (ArgumentOutOfRangeException ex) {
3260 // Specified argument was out of the range of valid values
3261 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#B2");
3262 Assert.IsNull (ex.InnerException, "#B3");
3263 Assert.IsNotNull (ex.Message, "#B4");
3264 Assert.AreEqual ("size", ex.ParamName, "#B5");
3270 [Test] // ReceiveFrom (Byte [], Int32, SocketFlags, ref EndPoint)
3271 public void ReceiveFrom3_Socket_Closed ()
3273 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3277 EndPoint remoteEP = new IPEndPoint (IPAddress.Loopback, 8001);
3279 s.ReceiveFrom ((Byte []) null, -1, (SocketFlags) 666,
3282 } catch (ObjectDisposedException ex) {
3283 // Cannot access a disposed object
3284 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
3285 Assert.IsNull (ex.InnerException, "#3");
3286 Assert.IsNotNull (ex.Message, "#4");
3287 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
3291 [Test] // ReceiveFrom (Byte [], Int32, Int32, SocketFlags, EndPoint)
3292 public void ReceiveFrom4_Buffer_Null ()
3294 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3296 EndPoint remoteEP = new IPEndPoint (IPAddress.Loopback, 8001);
3299 s.ReceiveFrom ((Byte []) null, -1, -1, (SocketFlags) 666,
3302 } catch (ArgumentNullException ex) {
3303 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
3304 Assert.IsNull (ex.InnerException, "#3");
3305 Assert.IsNotNull (ex.Message, "#4");
3306 Assert.AreEqual ("buffer", ex.ParamName, "#5");
3310 [Test] // ReceiveFrom (Byte [], Int32, Int32, SocketFlags, EndPoint)
3311 public void ReceiveFrom4_Offset_OutOfRange ()
3314 byte [] buffer = new byte [5];
3315 EndPoint remoteEP = new IPEndPoint (IPAddress.Loopback, 8001);
3318 s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3321 s.ReceiveFrom (buffer, -1, 0, (SocketFlags) 666,
3323 Assert.Fail ("#A1");
3324 } catch (ArgumentOutOfRangeException ex) {
3325 // Specified argument was out of the range of valid values
3326 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#A2");
3327 Assert.IsNull (ex.InnerException, "#A3");
3328 Assert.IsNotNull (ex.Message, "#A4");
3329 Assert.AreEqual ("offset", ex.ParamName, "#A5");
3334 // offset > buffer length
3335 s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3338 s.ReceiveFrom (buffer, (buffer.Length + 1), 0, (SocketFlags) 666,
3340 Assert.Fail ("#B1");
3341 } catch (ArgumentOutOfRangeException ex) {
3342 // Specified argument was out of the range of valid values
3343 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#B2");
3344 Assert.IsNull (ex.InnerException, "#B3");
3345 Assert.IsNotNull (ex.Message, "#B4");
3346 Assert.AreEqual ("offset", ex.ParamName, "#B5");
3352 [Test] // ReceiveFrom (Byte [], Int32, Int32, SocketFlags, ref IPEndPoint)
3353 public void ReceiveFrom4_RemoteEP_Null ()
3355 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3357 byte [] buffer = new byte [5];
3358 EndPoint remoteEP = null;
3361 s.ReceiveFrom (buffer, 0, buffer.Length, (SocketFlags) 666, ref remoteEP);
3363 } catch (ArgumentNullException ex) {
3364 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
3365 Assert.IsNull (ex.InnerException, "#3");
3366 Assert.IsNotNull (ex.Message, "#4");
3367 Assert.AreEqual ("remoteEP", ex.ParamName, "#5");
3373 [Test] // ReceiveFrom (Byte [], Int32, Int32, SocketFlags, EndPoint)
3374 public void ReceiveFrom4_Size_OutOfRange ()
3377 byte [] buffer = new byte [5];
3378 EndPoint remoteEP = new IPEndPoint (IPAddress.Loopback, 8001);
3381 s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3384 s.ReceiveFrom (buffer, 0, -1, (SocketFlags) 666,
3386 Assert.Fail ("#A1");
3387 } catch (ArgumentOutOfRangeException ex) {
3388 // Specified argument was out of the range of valid values
3389 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#A2");
3390 Assert.IsNull (ex.InnerException, "#A3");
3391 Assert.IsNotNull (ex.Message, "#A4");
3392 Assert.AreEqual ("size", ex.ParamName, "#A5");
3397 // size > buffer length
3398 s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3401 s.ReceiveFrom (buffer, 0, (buffer.Length + 1), (SocketFlags) 666,
3403 Assert.Fail ("#B1");
3404 } catch (ArgumentOutOfRangeException ex) {
3405 // Specified argument was out of the range of valid values
3406 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#B2");
3407 Assert.IsNull (ex.InnerException, "#B3");
3408 Assert.IsNotNull (ex.Message, "#B4");
3409 Assert.AreEqual ("size", ex.ParamName, "#B5");
3414 // offset + size > buffer length
3415 s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3418 s.ReceiveFrom (buffer, 2, 4, (SocketFlags) 666, ref remoteEP);
3419 Assert.Fail ("#C1");
3420 } catch (ArgumentOutOfRangeException ex) {
3421 // Specified argument was out of the range of valid values
3422 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#C2");
3423 Assert.IsNull (ex.InnerException, "#C3");
3424 Assert.IsNotNull (ex.Message, "#C4");
3425 Assert.AreEqual ("size", ex.ParamName, "#C5");
3431 [Test] // ReceiveFrom (Byte [], Int32, Int32, SocketFlags, ref EndPoint)
3432 public void ReceiveFrom4_Socket_Closed ()
3434 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3438 byte [] buffer = new byte [5];
3439 EndPoint remoteEP = new IPEndPoint (IPAddress.Loopback, 8001);
3441 s.ReceiveFrom (buffer, -1, -1, (SocketFlags) 666,
3444 } catch (ObjectDisposedException ex) {
3445 // Cannot access a disposed object
3446 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
3447 Assert.IsNull (ex.InnerException, "#3");
3448 Assert.IsNotNull (ex.Message, "#4");
3449 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
3454 public void ReceiveRemoteClosed ()
3456 Socket sock = new Socket (AddressFamily.InterNetwork,
3459 sock.Bind (new IPEndPoint (IPAddress.Loopback, 1257));
3463 Thread client_thread = new Thread (new ThreadStart (RRCClientThread));
3464 client_thread.Start ();
3466 Socket client = sock.Accept ();
3467 NetworkStream stream = new NetworkStream (client);
3468 stream.WriteByte (0x00);
3469 stream.WriteByte (0x00);
3473 RRCReady.WaitOne (1000, false);
3474 Assert.IsTrue (RRCLastRead);
3478 // Test case for bug #471580
3480 public void UdpDoubleBind ()
3482 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
3483 s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, 1);
3485 s.Bind (new IPEndPoint (IPAddress.Any, 12345));
3487 Socket ss = new Socket (AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
3488 ss.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, 1);
3490 ss.Bind (new IPEndPoint (IPAddress.Any, 12345));
3492 // If we make it this far, we succeeded.
3499 // when the linker is enabled then reflection won't work and would throw an NRE
3500 // this is also always true for iOS - so we do not need to poke internals
3501 static bool SupportsPortReuse ()
3506 static bool? supportsPortReuse;
3507 static bool SupportsPortReuse ()
3509 if (supportsPortReuse.HasValue)
3510 return supportsPortReuse.Value;
3512 supportsPortReuse = (bool) typeof (Socket).GetMethod ("SupportsPortReuse",
3513 BindingFlags.Static | BindingFlags.NonPublic)
3514 .Invoke (null, new object [] {});
3515 return supportsPortReuse.Value;
3519 // Test case for bug #31557
3521 public void TcpDoubleBind ()
3523 using (Socket s = new Socket (AddressFamily.InterNetwork,
3524 SocketType.Stream, ProtocolType.Tcp))
3525 using (Socket ss = new Socket (AddressFamily.InterNetwork,
3526 SocketType.Stream, ProtocolType.Tcp)) {
3527 s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
3529 s.Bind (new IPEndPoint (IPAddress.Any, 12345));
3532 ss.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
3534 Exception ex = null;
3536 ss.Bind (new IPEndPoint (IPAddress.Any, 12345));
3538 } catch (SocketException e) {
3542 Assert.AreEqual (SupportsPortReuse (), ex == null);
3547 [Category ("NotOnMac")]
3548 public void ConnectedProperty ()
3550 TcpListener listener = new TcpListener (IPAddress.Loopback, 23456);
3553 Socket client = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
3554 client.Connect (IPAddress.Loopback, 23456);
3555 Socket server = listener.AcceptSocket ();
3558 server.EndSend(server.BeginSend (new byte[10], 0, 10, SocketFlags.None, null, null));
3561 server.EndReceive (server.BeginReceive (new byte[10], 0, 10, SocketFlags.None, null, null));
3564 Assert.IsTrue (!client.Connected);
3565 Assert.IsTrue (!server.Connected);
3573 [Test] // GetSocketOption (SocketOptionLevel, SocketOptionName)
3574 public void GetSocketOption1_Socket_Closed ()
3576 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
3579 s.GetSocketOption (0, 0);
3581 } catch (ObjectDisposedException ex) {
3582 // Cannot access a disposed object
3583 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
3584 Assert.IsNull (ex.InnerException, "#3");
3585 Assert.IsNotNull (ex.Message, "#4");
3586 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
3590 [Test] // GetSocketOption (SocketOptionLevel, SocketOptionName, Byte [])
3591 public void GetSocketOption2_OptionValue_Null ()
3593 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
3595 s.GetSocketOption (SocketOptionLevel.Socket, SocketOptionName.Linger,
3598 } catch (SocketException ex) {
3599 // The system detected an invalid pointer address in attempting
3600 // to use a pointer argument in a call
3601 Assert.AreEqual (typeof (SocketException), ex.GetType (), "#2");
3602 Assert.AreEqual (10014, ex.ErrorCode, "#3");
3603 Assert.IsNull (ex.InnerException, "#4");
3604 Assert.IsNotNull (ex.Message, "#5");
3605 Assert.AreEqual (10014, ex.NativeErrorCode, "#6");
3606 Assert.AreEqual (SocketError.Fault, ex.SocketErrorCode, "#7");
3610 [Test] // GetSocketOption (SocketOptionLevel, SocketOptionName, Byte [])
3611 public void GetSocketOption2_Socket_Closed ()
3613 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
3616 s.GetSocketOption (0, 0, (byte []) null);
3618 } catch (ObjectDisposedException ex) {
3619 // Cannot access a disposed object
3620 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
3621 Assert.IsNull (ex.InnerException, "#3");
3622 Assert.IsNotNull (ex.Message, "#4");
3623 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
3627 [Test] // GetSocketOption (SocketOptionLevel, SocketOptionName, Int32)
3628 public void GetSocketOption3_Socket_Closed ()
3630 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
3633 s.GetSocketOption (0, 0, 0);
3635 } catch (ObjectDisposedException ex) {
3636 // Cannot access a disposed object
3637 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
3638 Assert.IsNull (ex.InnerException, "#3");
3639 Assert.IsNotNull (ex.Message, "#4");
3640 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
3644 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Byte [])
3645 public void SetSocketOption1_DontLinger ()
3647 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
3648 s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.DontLinger,
3649 new byte [] { 0x00 });
3650 s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.DontLinger,
3651 new byte [] { 0x01 });
3655 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Byte [])
3656 public void SetSocketOption1_DontLinger_Null ()
3658 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
3660 s.SetSocketOption (SocketOptionLevel.Socket,
3661 SocketOptionName.DontLinger, (byte []) null);
3663 } catch (SocketException ex) {
3664 // The system detected an invalid pointer address in attempting
3665 // to use a pointer argument in a call
3666 Assert.AreEqual (typeof (SocketException), ex.GetType (), "#2");
3667 Assert.AreEqual (10014, ex.ErrorCode, "#3");
3668 Assert.IsNull (ex.InnerException, "#4");
3669 Assert.IsNotNull (ex.Message, "#5");
3670 Assert.AreEqual (10014, ex.NativeErrorCode, "#6");
3671 Assert.AreEqual (SocketError.Fault, ex.SocketErrorCode, "#7");
3676 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Byte [])
3677 public void SetSocketOption1_Linger_Null ()
3679 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
3681 s.SetSocketOption (SocketOptionLevel.Socket,
3682 SocketOptionName.DontLinger, (byte []) null);
3684 } catch (SocketException ex) {
3685 // The system detected an invalid pointer address in attempting
3686 // to use a pointer argument in a call
3687 Assert.AreEqual (typeof (SocketException), ex.GetType (), "#2");
3688 Assert.AreEqual (10014, ex.ErrorCode, "#3");
3689 Assert.IsNull (ex.InnerException, "#4");
3690 Assert.IsNotNull (ex.Message, "#5");
3691 Assert.AreEqual (10014, ex.NativeErrorCode, "#6");
3692 Assert.AreEqual (SocketError.Fault, ex.SocketErrorCode, "#7");
3697 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Byte [])
3698 public void SetSocketOption1_Socket_Close ()
3700 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
3703 s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.DontLinger,
3704 new byte [] { 0x00 });
3706 } catch (ObjectDisposedException ex) {
3707 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
3708 Assert.IsNull (ex.InnerException, "#3");
3709 Assert.IsNotNull (ex.Message, "#4");
3710 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
3714 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Int32)
3715 public void SetSocketOption2_DontLinger ()
3717 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
3718 s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.DontLinger, 0);
3719 s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.DontLinger, 5);
3723 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Int32)
3724 [Category ("NotWorking")]
3725 public void SetSocketOption2_Linger ()
3727 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
3728 s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.Linger, 0);
3729 s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.Linger, 5);
3733 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Int32)
3734 public void SetSocketOption2_Socket_Closed ()
3736 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
3739 s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.DontLinger, 0);
3741 } catch (ObjectDisposedException ex) {
3742 // Cannot access a disposed object
3743 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
3744 Assert.IsNull (ex.InnerException, "#3");
3745 Assert.IsNotNull (ex.Message, "#4");
3746 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
3750 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
3751 public void SetSocketOption3_AddMembershipIPv4_IPv6MulticastOption ()
3753 IPAddress mcast_addr = IPAddress.Parse ("239.255.255.250");
3755 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp)) {
3756 s.Bind (new IPEndPoint (IPAddress.Any, 1901));
3758 s.SetSocketOption (SocketOptionLevel.IP, SocketOptionName.AddMembership,
3759 new IPv6MulticastOption (mcast_addr));
3761 } catch (ArgumentException ex) {
3762 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
3763 Assert.IsNull (ex.InnerException, "#3");
3764 Assert.IsNotNull (ex.Message, "#4");
3765 // The specified value is not a valid 'MulticastOption'
3766 Assert.IsTrue (ex.Message.IndexOf ("'MulticastOption'") != -1, "#5:" + ex.Message);
3767 Assert.AreEqual ("optionValue", ex.ParamName, "#6");
3772 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
3773 public void SetSocketOption3_AddMembershipIPv4_MulticastOption ()
3775 IPAddress mcast_addr = IPAddress.Parse ("239.255.255.250");
3777 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp)) {
3778 s.Bind (new IPEndPoint (IPAddress.Any, 1901));
3779 s.SetSocketOption (SocketOptionLevel.IP, SocketOptionName.AddMembership,
3780 new MulticastOption (mcast_addr));
3784 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
3785 [Category ("NotWorking")]
3786 public void SetSocketOption3_AddMembershipIPv4_Socket_NotBound ()
3788 IPAddress mcast_addr = IPAddress.Parse ("239.255.255.250");
3790 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
3792 s.SetSocketOption (SocketOptionLevel.IP, SocketOptionName.AddMembership,
3793 new MulticastOption (mcast_addr));
3795 } catch (SocketException ex) {
3796 // An invalid argument was supplied
3797 Assert.AreEqual (typeof (SocketException), ex.GetType (), "#2");
3798 Assert.AreEqual (10022, ex.ErrorCode, "#3");
3799 Assert.IsNull (ex.InnerException, "#4");
3800 Assert.IsNotNull (ex.Message, "#5");
3801 Assert.AreEqual (10022, ex.NativeErrorCode, "#6");
3802 Assert.AreEqual (SocketError.InvalidArgument, ex.SocketErrorCode, "#7");
3808 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
3809 public void SetSocketOption3_AddMembershipIPv6_IPv6MulticastOption ()
3811 if (!Socket.OSSupportsIPv6)
3812 Assert.Ignore ("IPv6 not enabled.");
3814 IPAddress mcast_addr = IPAddress.Parse ("ff02::1");
3816 using (Socket s = new Socket (AddressFamily.InterNetworkV6, SocketType.Dgram, ProtocolType.Udp)) {
3817 s.Bind (new IPEndPoint (IPAddress.IPv6Any, 1902));
3818 s.SetSocketOption (SocketOptionLevel.IPv6, SocketOptionName.AddMembership,
3819 new IPv6MulticastOption (mcast_addr));
3823 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
3824 public void SetSocketOption3_AddMembershipIPv6_MulticastOption ()
3826 if (!Socket.OSSupportsIPv6)
3827 Assert.Ignore ("IPv6 not enabled.");
3829 IPAddress mcast_addr = IPAddress.Parse ("ff02::1");
3831 using (Socket s = new Socket (AddressFamily.InterNetworkV6, SocketType.Dgram, ProtocolType.Udp)) {
3832 s.Bind (new IPEndPoint (IPAddress.IPv6Any, 1902));
3834 s.SetSocketOption (SocketOptionLevel.IPv6, SocketOptionName.AddMembership,
3835 new MulticastOption (mcast_addr));
3837 } catch (ArgumentException ex) {
3838 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
3839 Assert.IsNull (ex.InnerException, "#3");
3840 Assert.IsNotNull (ex.Message, "#4");
3841 // The specified value is not a valid 'IPv6MulticastOption'
3842 Assert.IsTrue (ex.Message.IndexOf ("'IPv6MulticastOption'") != -1, "#5:" + ex.Message);
3843 Assert.AreEqual ("optionValue", ex.ParamName, "#6");
3848 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
3849 [Category ("NotWorking")]
3850 public void SetSocketOption3_AddMembershipIPv6_Socket_NotBound ()
3852 IPAddress mcast_addr = IPAddress.Parse ("ff02::1");
3854 Socket s = new Socket (AddressFamily.InterNetworkV6, SocketType.Dgram, ProtocolType.Udp);
3856 s.SetSocketOption (SocketOptionLevel.IPv6, SocketOptionName.AddMembership,
3857 new IPv6MulticastOption (mcast_addr));
3859 } catch (SocketException ex) {
3860 // An invalid argument was supplied
3861 Assert.AreEqual (typeof (SocketException), ex.GetType (), "#2");
3862 Assert.AreEqual (10022, ex.ErrorCode, "#3");
3863 Assert.IsNull (ex.InnerException, "#4");
3864 Assert.IsNotNull (ex.Message, "#5");
3865 Assert.AreEqual (10022, ex.NativeErrorCode, "#6");
3866 Assert.AreEqual (SocketError.InvalidArgument, ex.SocketErrorCode, "#7");
3872 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
3873 public void SetSocketOption3_DontLinger_Boolean ()
3875 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
3877 s.SetSocketOption (SocketOptionLevel.Socket,
3878 SocketOptionName.DontLinger, (object) false);
3880 } catch (ArgumentException ex) {
3881 // The specified value is not valid
3882 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
3883 Assert.IsNull (ex.InnerException, "#3");
3884 Assert.IsNotNull (ex.Message, "#4");
3885 Assert.AreEqual ("optionValue", ex.ParamName, "#5");
3890 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
3891 public void SetSocketOption3_DontLinger_Int32 ()
3893 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
3895 s.SetSocketOption (SocketOptionLevel.Socket,
3896 SocketOptionName.DontLinger, (object) 0);
3898 } catch (ArgumentException ex) {
3899 // The specified value is not valid
3900 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
3901 Assert.IsNull (ex.InnerException, "#3");
3902 Assert.IsNotNull (ex.Message, "#4");
3903 Assert.AreEqual ("optionValue", ex.ParamName, "#5");
3908 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
3909 public void SetSocketOption3_DontLinger_LingerOption ()
3911 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
3913 s.SetSocketOption (SocketOptionLevel.Socket,
3914 SocketOptionName.DontLinger, new LingerOption (true, 1000));
3916 } catch (ArgumentException ex) {
3917 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
3918 Assert.IsNull (ex.InnerException, "#3");
3919 // The specified value is not valid
3920 Assert.IsNotNull (ex.Message, "#4");
3921 Assert.AreEqual ("optionValue", ex.ParamName, "#5");
3926 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
3927 public void SetSocketOption3_Linger_Boolean ()
3929 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
3931 s.SetSocketOption (SocketOptionLevel.Socket,
3932 SocketOptionName.Linger, (object) false);
3934 } catch (ArgumentException ex) {
3935 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
3936 Assert.IsNull (ex.InnerException, "#3");
3937 // The specified value is not valid
3938 Assert.IsNotNull (ex.Message, "#4");
3939 Assert.AreEqual ("optionValue", ex.ParamName, "#5");
3944 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
3945 public void SetSocketOption3_Linger_Int32 ()
3947 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
3949 s.SetSocketOption (SocketOptionLevel.Socket,
3950 SocketOptionName.Linger, (object) 0);
3952 } catch (ArgumentException ex) {
3953 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
3954 Assert.IsNull (ex.InnerException, "#3");
3955 // The specified value is not valid
3956 Assert.IsNotNull (ex.Message, "#4");
3957 Assert.AreEqual ("optionValue", ex.ParamName, "#5");
3962 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
3963 public void SetSocketOption3_Linger_LingerOption ()
3965 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
3966 s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.Linger,
3967 new LingerOption (false, 0));
3968 s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.Linger,
3969 new LingerOption (true, 0));
3970 s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.Linger,
3971 new LingerOption (false, 1000));
3972 s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.Linger,
3973 new LingerOption (true, 1000));
3977 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
3978 public void SetSocketOption3_DropMembershipIPv4_IPv6MulticastOption ()
3980 IPAddress mcast_addr = IPAddress.Parse ("239.255.255.250");
3982 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp)) {
3983 s.Bind (new IPEndPoint (IPAddress.Any, 1901));
3984 s.SetSocketOption (SocketOptionLevel.IP, SocketOptionName.AddMembership,
3985 new MulticastOption (mcast_addr));
3987 s.SetSocketOption (SocketOptionLevel.IP, SocketOptionName.DropMembership,
3988 new IPv6MulticastOption (mcast_addr));
3990 } catch (ArgumentException ex) {
3991 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
3992 Assert.IsNull (ex.InnerException, "#3");
3993 Assert.IsNotNull (ex.Message, "#4");
3994 // The specified value is not a valid 'MulticastOption'
3995 Assert.IsTrue (ex.Message.IndexOf ("'MulticastOption'") != -1, "#5:" + ex.Message);
3996 Assert.AreEqual ("optionValue", ex.ParamName, "#6");
4001 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
4002 public void SetSocketOption3_DropMembershipIPv4_MulticastOption ()
4004 IPAddress mcast_addr = IPAddress.Parse ("239.255.255.250");
4006 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp)) {
4007 MulticastOption option = new MulticastOption (mcast_addr);
4009 s.Bind (new IPEndPoint (IPAddress.Any, 1901));
4010 s.SetSocketOption (SocketOptionLevel.IP, SocketOptionName.AddMembership,
4012 s.SetSocketOption (SocketOptionLevel.IP, SocketOptionName.DropMembership,
4017 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
4018 [Category ("NotWorking")]
4019 public void SetSocketOption3_DropMembershipIPv4_Socket_NotBound ()
4021 IPAddress mcast_addr = IPAddress.Parse ("239.255.255.250");
4023 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
4025 s.SetSocketOption (SocketOptionLevel.IP, SocketOptionName.DropMembership,
4026 new MulticastOption (mcast_addr));
4028 } catch (SocketException ex) {
4029 // An invalid argument was supplied
4030 Assert.AreEqual (typeof (SocketException), ex.GetType (), "#2");
4031 Assert.AreEqual (10022, ex.ErrorCode, "#3");
4032 Assert.IsNull (ex.InnerException, "#4");
4033 Assert.IsNotNull (ex.Message, "#5");
4034 Assert.AreEqual (10022, ex.NativeErrorCode, "#6");
4035 Assert.AreEqual (SocketError.InvalidArgument, ex.SocketErrorCode, "#7");
4041 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
4042 public void SetSocketOption3_DropMembershipIPv6_IPv6MulticastOption ()
4044 if (!Socket.OSSupportsIPv6)
4045 Assert.Ignore ("IPv6 not enabled.");
4047 using (Socket s = new Socket (AddressFamily.InterNetworkV6, SocketType.Dgram, ProtocolType.Udp)) {
4048 IPv6MulticastOption option = new IPv6MulticastOption (
4049 IPAddress.Parse ("ff02::1"));
4051 s.Bind (new IPEndPoint (IPAddress.IPv6Any, 1902));
4052 s.SetSocketOption (SocketOptionLevel.IPv6, SocketOptionName.AddMembership,
4054 s.SetSocketOption (SocketOptionLevel.IPv6, SocketOptionName.DropMembership,
4059 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
4060 public void SetSocketOption3_DropMembershipIPv6_MulticastOption ()
4062 if (!Socket.OSSupportsIPv6)
4063 Assert.Ignore ("IPv6 not enabled.");
4065 IPAddress mcast_addr = IPAddress.Parse ("ff02::1");
4067 using (Socket s = new Socket (AddressFamily.InterNetworkV6, SocketType.Dgram, ProtocolType.Udp)) {
4068 s.Bind (new IPEndPoint (IPAddress.IPv6Any, 1902));
4069 s.SetSocketOption (SocketOptionLevel.IPv6, SocketOptionName.AddMembership,
4070 new IPv6MulticastOption (mcast_addr));
4072 s.SetSocketOption (SocketOptionLevel.IPv6, SocketOptionName.DropMembership,
4073 new MulticastOption (mcast_addr));
4075 } catch (ArgumentException ex) {
4076 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
4077 Assert.IsNull (ex.InnerException, "#3");
4078 Assert.IsNotNull (ex.Message, "#4");
4079 // The specified value is not a valid 'IPv6MulticastOption'
4080 Assert.IsTrue (ex.Message.IndexOf ("'IPv6MulticastOption'") != -1, "#5:" + ex.Message);
4081 Assert.AreEqual ("optionValue", ex.ParamName, "#6");
4086 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
4087 [Category ("NotWorking")]
4088 public void SetSocketOption3_DropMembershipIPv6_Socket_NotBound ()
4090 IPAddress mcast_addr = IPAddress.Parse ("ff02::1");
4092 Socket s = new Socket (AddressFamily.InterNetworkV6, SocketType.Dgram, ProtocolType.Udp);
4094 s.SetSocketOption (SocketOptionLevel.IPv6, SocketOptionName.DropMembership,
4095 new IPv6MulticastOption (mcast_addr));
4097 } catch (SocketException ex) {
4098 // An invalid argument was supplied
4099 Assert.AreEqual (typeof (SocketException), ex.GetType (), "#2");
4100 Assert.AreEqual (10022, ex.ErrorCode, "#3");
4101 Assert.IsNull (ex.InnerException, "#4");
4102 Assert.IsNotNull (ex.Message, "#5");
4103 Assert.AreEqual (10022, ex.NativeErrorCode, "#6");
4104 Assert.AreEqual (SocketError.InvalidArgument, ex.SocketErrorCode, "#7");
4110 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
4111 public void SetSocketOption3_OptionValue_Null ()
4113 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
4115 s.SetSocketOption (SocketOptionLevel.Socket,
4116 SocketOptionName.Linger, (object) null);
4118 } catch (ArgumentNullException ex) {
4119 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
4120 Assert.IsNull (ex.InnerException, "#3");
4121 Assert.IsNotNull (ex.Message, "#4");
4122 Assert.AreEqual ("optionValue", ex.ParamName, "#5");
4127 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
4128 public void SetSocketOption3_Socket_Closed ()
4130 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
4133 s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.Linger,
4134 new LingerOption (false, 0));
4136 } catch (ObjectDisposedException ex) {
4137 // Cannot access a disposed object
4138 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
4139 Assert.IsNull (ex.InnerException, "#3");
4140 Assert.IsNotNull (ex.Message, "#4");
4141 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
4146 public void SetSocketOption_MulticastInterfaceIndex_Any ()
4148 IPAddress ip = IPAddress.Parse ("239.255.255.250");
4150 using (Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp))
4152 s.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.MulticastInterface, IPAddress.HostToNetworkOrder(index));
4153 s.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership, new MulticastOption(ip, index));
4158 public void SetSocketOption_MulticastInterfaceIndex_Loopback ()
4160 IPAddress ip = IPAddress.Parse ("239.255.255.250");
4162 using (Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp))
4164 s.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.MulticastInterface, IPAddress.HostToNetworkOrder(index));
4165 s.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership, new MulticastOption(ip, index));
4170 public void SetSocketOption_MulticastInterfaceIndex_Invalid ()
4172 IPAddress ip = IPAddress.Parse ("239.255.255.250");
4174 using (Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp))
4178 s.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.MulticastInterface, IPAddress.HostToNetworkOrder(index));
4185 s.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership, new MulticastOption(ip, index));
4194 public void Shutdown_NoConnect ()
4196 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
4197 s.Bind (new IPEndPoint (IPAddress.Loopback, 0));
4200 s.Shutdown (SocketShutdown.Both);
4202 } catch (SocketException exc) {
4203 Assert.AreEqual (10057, exc.ErrorCode, "#2");
4210 [ExpectedException (typeof (NullReferenceException))]
4211 public void ReceiveAsync_Null ()
4213 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
4214 s.ReceiveAsync (null);
4219 [ExpectedException (typeof (NullReferenceException))]
4220 public void ReceiveAsync_Default ()
4222 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
4223 SocketAsyncEventArgs saea = new SocketAsyncEventArgs ();
4224 s.ReceiveAsync (saea);
4230 [ExpectedException (typeof (NullReferenceException))]
4231 public void ReceiveAsync_NullBuffer ()
4233 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
4234 SocketAsyncEventArgs saea = new SocketAsyncEventArgs ();
4235 saea.SetBuffer (null, 0, 0);
4236 s.ReceiveAsync (null);
4241 [ExpectedException (typeof (ObjectDisposedException))]
4242 public void ReceiveAsync_ClosedSocket ()
4244 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
4246 s.ReceiveAsync (null);
4250 [ExpectedException (typeof (NullReferenceException))]
4251 public void SendAsync_Null ()
4253 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
4259 [ExpectedException (typeof (NullReferenceException))]
4260 public void SendAsync_Default ()
4262 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
4263 SocketAsyncEventArgs saea = new SocketAsyncEventArgs ();
4270 [ExpectedException (typeof (NullReferenceException))]
4271 public void SendAsync_NullBuffer ()
4273 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
4274 SocketAsyncEventArgs saea = new SocketAsyncEventArgs ();
4275 saea.SetBuffer (null, 0, 0);
4281 [ExpectedException (typeof (ObjectDisposedException))]
4282 public void SendAsync_ClosedSocket ()
4284 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
4290 public void SendAsyncFile ()
4292 Socket serverSocket = StartSocketServer ();
4294 Socket clientSocket = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
4295 clientSocket.Connect (serverSocket.LocalEndPoint);
4296 clientSocket.NoDelay = true;
4298 // Initialize buffer used to create testing file
4299 var buffer = new byte [1024];
4300 for (int i = 0; i < 1024; ++i)
4301 buffer [i] = (byte) (i % 256);
4303 string temp = Path.GetTempFileName ();
4305 // Testing file creation
4306 using (StreamWriter sw = new StreamWriter (temp)) {
4310 var m = new ManualResetEvent (false);
4312 // Async Send File to server
4313 clientSocket.BeginSendFile(temp, (ar) => {
4314 Socket client = (Socket) ar.AsyncState;
4315 client.EndSendFile (ar);
4319 if (!m.WaitOne (1500))
4320 throw new TimeoutException ();
4323 if (File.Exists (temp))
4326 clientSocket.Close ();
4327 serverSocket.Close ();
4331 Socket StartSocketServer ()
4334 Socket listenSocket = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
4336 listenSocket.Bind (new IPEndPoint (IPAddress.Loopback, 0));
4337 listenSocket.Listen (1);
4339 listenSocket.BeginAccept (new AsyncCallback (ReceiveCallback), listenSocket);
4341 return listenSocket;
4344 public static void ReceiveCallback (IAsyncResult AsyncCall)
4346 byte[] bytes = new byte [1024];
4348 Socket listener = (Socket)AsyncCall.AsyncState;
4349 Socket client = listener.EndAccept (AsyncCall);
4351 client.Receive (bytes, bytes.Length, 0);
4356 public void UdpMulticasTimeToLive ()
4358 /* see https://bugzilla.xamarin.com/show_bug.cgi?id=36941 */
4360 using (Socket socket = new Socket (AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp)) {
4361 IPEndPoint end_point = new IPEndPoint (IPAddress.Any, 11000);
4362 socket.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, 1);
4363 socket.Bind (end_point);
4364 socket.SetSocketOption (SocketOptionLevel.IP, SocketOptionName.MulticastTimeToLive, 19);