1 // System.Net.Sockets.SocketTest.cs
4 // Brad Fitzpatrick (brad@danga.com)
5 // Gonzalo Paniagua Javier (gonzalo@novell.com)
7 // (C) Copyright 2003 Brad Fitzpatrick
8 // Copyright (c) 2005 Novell, Inc. (http://www.novell.com)
12 using System.Collections;
13 using System.Threading;
15 using System.Net.Sockets;
16 using NUnit.Framework;
20 using System.Collections.Generic;
23 namespace MonoTests.System.Net.Sockets
26 public class SocketTest
28 // note: also used in SocketCas tests
29 public const string BogusAddress = "192.168.244.244";
30 public const int BogusPort = 23483;
33 public void ConnectIPAddressAny ()
35 IPEndPoint ep = new IPEndPoint (IPAddress.Any, 0);
37 /* UDP sockets use Any to disconnect
39 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp)) {
44 } catch (SocketException ex) {
45 Assert.AreEqual (10049, ex.ErrorCode, "#2");
50 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
55 } catch (SocketException ex) {
56 Assert.AreEqual (10049, ex.ErrorCode, "#4");
61 [Ignore ("Bug #75158")] // Looks like MS fails after the .ctor, when you try to use the socket
62 public void IncompatibleAddress ()
64 IPEndPoint epIPv6 = new IPEndPoint (IPAddress.IPv6Any,
68 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP)) {
73 } catch (SocketException ex) {
76 int expectedError = 10022;
78 // address incompatible with protocol
79 int expectedError = 10047;
81 Assert.AreEqual (expectedError, ex.ErrorCode,
87 [Category ("InetAccess")]
88 public void BogusEndConnect ()
90 IPAddress ipOne = IPAddress.Parse (BogusAddress);
91 IPEndPoint ipEP = new IPEndPoint (ipOne, BogusPort);
92 Socket sock = new Socket (ipEP.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
93 IAsyncResult ar = sock.BeginConnect (ipEP, null, null);
96 // should raise an exception because connect was bogus
99 } catch (SocketException ex) {
100 // Actual error code depends on network configuration.
101 var error = (SocketError) ex.ErrorCode;
102 Assert.That (error == SocketError.TimedOut ||
103 error == SocketError.ConnectionRefused ||
104 error == SocketError.NetworkUnreachable ||
105 error == SocketError.HostUnreachable, "#2");
110 [ExpectedException (typeof (ArgumentNullException))]
111 public void SelectEmpty ()
113 ArrayList list = new ArrayList ();
114 Socket.Select (list, list, list, 1000);
117 private bool BlockingConnect (bool block)
119 IPEndPoint ep = new IPEndPoint(IPAddress.Loopback, 1234);
120 Socket server = new Socket(AddressFamily.InterNetwork,
124 server.Blocking=block;
128 Socket conn = new Socket (AddressFamily.InterNetwork,
133 Socket client = server.Accept();
134 bool client_block = client.Blocking;
140 return(client_block);
144 public void AcceptBlockingStatus()
148 block = BlockingConnect(true);
149 Assert.AreEqual (block, true, "BlockingStatus01");
151 block = BlockingConnect(false);
152 Assert.AreEqual (block, false, "BlockingStatus02");
155 static bool CFAConnected = false;
156 static ManualResetEvent CFACalledBack;
158 private static void CFACallback (IAsyncResult asyncResult)
160 Socket sock = (Socket)asyncResult.AsyncState;
161 CFAConnected = sock.Connected;
163 if (sock.Connected) {
164 sock.EndConnect (asyncResult);
167 CFACalledBack.Set ();
170 [Test] // Connect (IPEndPoint)
171 public void Connect1_RemoteEP_Null ()
173 Socket s = new Socket (AddressFamily.InterNetwork,
174 SocketType.Stream, ProtocolType.Tcp);
176 s.Connect ((IPEndPoint) null);
178 } catch (ArgumentNullException ex) {
179 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
180 Assert.IsNull (ex.InnerException, "#3");
181 Assert.IsNotNull (ex.Message, "#4");
182 Assert.AreEqual ("remoteEP", ex.ParamName, "#5");
187 public void ConnectFailAsync ()
189 Socket sock = new Socket (AddressFamily.InterNetwork,
192 sock.Blocking = false;
193 CFACalledBack = new ManualResetEvent (false);
194 CFACalledBack.Reset ();
196 /* Need a port that is not being used for
199 sock.BeginConnect (new IPEndPoint (IPAddress.Loopback,
201 new AsyncCallback (CFACallback),
203 CFACalledBack.WaitOne ();
205 Assert.AreEqual (CFAConnected, false, "ConnectFail");
210 [ExpectedException (typeof (ArgumentException))]
212 public void SetSocketOptionBoolean ()
214 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 1);
215 Socket sock = new Socket (ep.Address.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
217 sock.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.KeepAlive, true);
223 public void TestSelect1 ()
225 Socket srv = CreateServer ();
226 ClientSocket clnt = new ClientSocket (srv.LocalEndPoint);
227 Thread th = new Thread (new ThreadStart (clnt.ConnectSleepClose));
233 ArrayList list = new ArrayList ();
234 ArrayList empty = new ArrayList ();
236 Socket.Select (list, empty, empty, 100);
237 Assert.AreEqual (0, empty.Count, "#01");
238 Assert.AreEqual (1, list.Count, "#02");
239 Socket.Select (empty, list, empty, 100);
240 Assert.AreEqual (0, empty.Count, "#03");
241 Assert.AreEqual (1, list.Count, "#04");
242 Socket.Select (list, empty, empty, -1);
243 Assert.AreEqual (0, empty.Count, "#05");
244 Assert.AreEqual (1, list.Count, "#06");
245 // Need to read the 10 bytes from the client to avoid a RST
246 byte [] bytes = new byte [10];
255 static Socket CreateServer ()
257 Socket sock = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
258 sock.Bind (new IPEndPoint (IPAddress.Loopback, 0));
267 public ClientSocket (EndPoint ep)
270 sock = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
273 public void ConnectSleepClose ()
282 byte [] b = new byte [10];
287 byte[] buf = new byte[100];
290 [ExpectedException (typeof (ObjectDisposedException))]
291 public void Disposed2 ()
293 Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
300 [ExpectedException (typeof (ObjectDisposedException))]
301 public void Disposed6 ()
303 Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
310 [ExpectedException (typeof (ObjectDisposedException))]
311 public void Disposed7 ()
313 Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
320 [ExpectedException (typeof (ObjectDisposedException))]
321 public void Disposed15 ()
323 Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
330 [ExpectedException (typeof (ObjectDisposedException))]
331 public void Disposed16 ()
333 Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
340 [ExpectedException (typeof (ObjectDisposedException))]
341 public void Disposed17 ()
343 Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
350 [ExpectedException (typeof (ObjectDisposedException))]
351 public void Disposed18 ()
353 Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
356 s.Send (buf, 0, 10, 0);
360 [ExpectedException (typeof (ObjectDisposedException))]
361 public void Disposed19 ()
363 Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
364 EndPoint ep = new IPEndPoint (IPAddress.Any, 31337);
367 s.SendTo (buf, 0, ep);
371 [ExpectedException (typeof (ObjectDisposedException))]
372 public void Disposed20 ()
374 Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
375 EndPoint ep = new IPEndPoint (IPAddress.Any, 31337);
378 s.SendTo (buf, 10, 0, ep);
382 [ExpectedException (typeof (ObjectDisposedException))]
383 public void Disposed21 ()
385 Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
386 EndPoint ep = new IPEndPoint (IPAddress.Any, 31337);
389 s.SendTo (buf, 0, 10, 0, ep);
393 [ExpectedException (typeof (ObjectDisposedException))]
394 public void Disposed22 ()
396 Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
397 EndPoint ep = new IPEndPoint (IPAddress.Any, 31337);
404 [ExpectedException (typeof (ObjectDisposedException))]
405 public void Disposed23 ()
407 Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
414 public void GetHashCodeTest ()
416 Socket server = new Socket (AddressFamily.InterNetwork,
417 SocketType.Stream, ProtocolType.Tcp);
418 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
423 Socket client = new Socket (AddressFamily.InterNetwork,
424 SocketType.Stream, ProtocolType.Tcp);
425 int hashcodeA = client.GetHashCode ();
427 int hashcodeB = client.GetHashCode ();
428 Assert.AreEqual (hashcodeA, hashcodeB, "#1");
430 int hashcodeC = client.GetHashCode ();
432 Assert.AreEqual (hashcodeB, hashcodeC, "#2");
434 Assert.IsFalse (hashcodeB == hashcodeC, "#2");
439 static ManualResetEvent SocketError_event = new ManualResetEvent (false);
441 private static void SocketError_callback (IAsyncResult ar)
443 Socket sock = (Socket)ar.AsyncState;
446 sock.EndConnect (ar);
449 SocketError_event.Set ();
453 public void SocketErrorTest ()
455 Socket sock = new Socket (AddressFamily.InterNetwork,
458 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
461 SocketError_event.Reset ();
463 sock.Blocking = false;
464 sock.BeginConnect (ep, new AsyncCallback(SocketError_callback),
467 if (SocketError_event.WaitOne (2000, false) == false) {
468 Assert.Fail ("SocketError wait timed out");
471 Assert.AreEqual (false, sock.Connected, "SocketError #1");
475 error = (int)sock.GetSocketOption (SocketOptionLevel.Socket, SocketOptionName.Error);
476 Assert.AreEqual (10061, error, "SocketError #2");
478 error = (int)sock.GetSocketOption (SocketOptionLevel.Socket, SocketOptionName.Error);
479 Assert.AreEqual (10061, error, "SocketError #3");
487 public void SocketInformationCtor ()
492 public void DontFragmentDefaultTcp ()
494 Socket sock = new Socket (AddressFamily.InterNetwork,
498 Assert.AreEqual (false, sock.DontFragment, "DontFragmentDefaultTcp");
504 [Category ("NotWorking")] // DontFragment doesn't work
505 public void DontFragmentChangeTcp ()
507 Socket sock = new Socket (AddressFamily.InterNetwork,
511 sock.DontFragment = true;
513 Assert.AreEqual (true, sock.DontFragment, "DontFragmentChangeTcp");
519 public void DontFragmentDefaultUdp ()
521 Socket sock = new Socket (AddressFamily.InterNetwork,
525 Assert.AreEqual (false, sock.DontFragment, "DontFragmentDefaultUdp");
531 [Category ("NotWorking")] // DontFragment doesn't work
532 public void DontFragmentChangeUdp ()
534 Socket sock = new Socket (AddressFamily.InterNetwork,
538 sock.DontFragment = true;
540 Assert.AreEqual (true, sock.DontFragment, "DontFragmentChangeUdp");
546 [ExpectedException (typeof(ObjectDisposedException))]
547 public void DontFragmentClosed ()
549 Socket sock = new Socket (AddressFamily.InterNetwork,
555 bool val = sock.DontFragment;
559 [Category ("NotWorking")] // Need to pick a non-IP AddressFamily that "works" on both mono and ms, this one only works on ms
560 public void DontFragment ()
562 Socket sock = new Socket (AddressFamily.NetBios,
563 SocketType.Seqpacket,
564 ProtocolType.Unspecified);
567 sock.DontFragment = true;
568 Assert.Fail ("DontFragment #1");
569 } catch (NotSupportedException) {
571 Assert.Fail ("DontFragment #2");
578 public void EnableBroadcastDefaultTcp ()
580 Socket sock = new Socket (AddressFamily.InterNetwork,
585 bool value = sock.EnableBroadcast;
586 Assert.Fail ("EnableBroadcastDefaultTcp #1");
587 } catch (SocketException ex) {
588 Assert.AreEqual (10042, ex.ErrorCode, "EnableBroadcastDefaultTcp #2");
590 Assert.Fail ("EnableBroadcastDefaultTcp #2");
597 public void EnableBroadcastDefaultUdp ()
599 Socket sock = new Socket (AddressFamily.InterNetwork,
603 Assert.AreEqual (false, sock.EnableBroadcast, "EnableBroadcastDefaultUdp");
609 public void EnableBroadcastChangeTcp ()
611 Socket sock = new Socket (AddressFamily.InterNetwork,
616 sock.EnableBroadcast = true;
617 Assert.Fail ("EnableBroadcastChangeTcp #1");
618 } catch (SocketException ex) {
619 Assert.AreEqual (10042, ex.ErrorCode, "EnableBroadcastChangeTcp #2");
621 Assert.Fail ("EnableBroadcastChangeTcp #2");
628 public void EnableBroadcastChangeUdp ()
630 Socket sock = new Socket (AddressFamily.InterNetwork,
634 sock.EnableBroadcast = true;
636 Assert.AreEqual (true, sock.EnableBroadcast, "EnableBroadcastChangeUdp");
642 [ExpectedException (typeof(ObjectDisposedException))]
643 public void EnableBroadcastClosed ()
645 Socket sock = new Socket (AddressFamily.InterNetwork,
651 bool val = sock.EnableBroadcast;
654 /* Can't test the default for ExclusiveAddressUse as
655 * it's different on different versions and service
659 [Category ("NotWorking")] // Not supported on Linux
660 public void ExclusiveAddressUseUnbound ()
662 Socket sock = new Socket (AddressFamily.InterNetwork,
666 sock.ExclusiveAddressUse = true;
668 Assert.AreEqual (true, sock.ExclusiveAddressUse, "ExclusiveAddressUseUnbound");
674 [ExpectedException (typeof(InvalidOperationException))]
675 [Category ("NotWorking")] // Not supported on Linux
676 public void ExclusiveAddressUseBound ()
678 Socket sock = new Socket (AddressFamily.InterNetwork,
682 sock.Bind (new IPEndPoint (IPAddress.Any, 1235));
683 sock.ExclusiveAddressUse = true;
688 [ExpectedException (typeof(ObjectDisposedException))]
689 public void ExclusiveAddressUseClosed ()
691 Socket sock = new Socket (AddressFamily.InterNetwork,
697 bool val = sock.ExclusiveAddressUse;
701 public void IsBoundTcp ()
703 Socket sock = new Socket (AddressFamily.InterNetwork,
706 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
709 Assert.AreEqual (false, sock.IsBound, "IsBoundTcp #1");
712 Assert.AreEqual (true, sock.IsBound, "IsBoundTcp #2");
716 Socket sock2 = new Socket (AddressFamily.InterNetwork,
720 Assert.AreEqual (false, sock2.IsBound, "IsBoundTcp #3");
723 Assert.AreEqual (true, sock2.IsBound, "IsBoundTcp #4");
726 Assert.AreEqual (true, sock2.IsBound, "IsBoundTcp #5");
729 Assert.AreEqual (true, sock.IsBound, "IsBoundTcp #6");
733 public void IsBoundUdp ()
735 Socket sock = new Socket (AddressFamily.InterNetwork,
738 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
741 Assert.AreEqual (false, sock.IsBound, "IsBoundUdp #1");
744 Assert.AreEqual (true, sock.IsBound, "IsBoundUdp #2");
747 Assert.AreEqual (true, sock.IsBound, "IsBoundUdp #3");
750 sock = new Socket (AddressFamily.InterNetwork,
754 Assert.AreEqual (false, sock.IsBound, "IsBoundUdp #4");
757 Assert.AreEqual (true, sock.IsBound, "IsBoundUdp #5");
760 Assert.AreEqual (true, sock.IsBound, "IsBoundUdp #6");
764 /* Should not throw an exception */
765 public void IsBoundClosed ()
767 Socket sock = new Socket (AddressFamily.InterNetwork,
773 bool val = sock.IsBound;
776 /* Nothing much to test for LingerState */
779 public void MulticastLoopbackDefaultTcp ()
781 Socket sock = new Socket (AddressFamily.InterNetwork,
786 bool value = sock.MulticastLoopback;
787 Assert.Fail ("MulticastLoopbackDefaultTcp #1");
788 } catch (SocketException ex) {
789 Assert.AreEqual (10042, ex.ErrorCode, "MulticastLoopbackDefaultTcp #2");
791 Assert.Fail ("MulticastLoopbackDefaultTcp #2");
798 public void MulticastLoopbackChangeTcp ()
800 Socket sock = new Socket (AddressFamily.InterNetwork,
805 sock.MulticastLoopback = false;
806 Assert.Fail ("MulticastLoopbackChangeTcp #1");
807 } catch (SocketException ex) {
808 Assert.AreEqual (10042, ex.ErrorCode, "MulticastLoopbackChangeTcp #2");
810 Assert.Fail ("MulticastLoopbackChangeTcp #2");
817 public void MulticastLoopbackDefaultUdp ()
819 Socket sock = new Socket (AddressFamily.InterNetwork,
823 Assert.AreEqual (true, sock.MulticastLoopback, "MulticastLoopbackDefaultUdp");
829 public void MulticastLoopbackChangeUdp ()
831 Socket sock = new Socket (AddressFamily.InterNetwork,
835 sock.MulticastLoopback = false;
837 Assert.AreEqual (false, sock.MulticastLoopback, "MulticastLoopbackChangeUdp");
843 [ExpectedException (typeof(ObjectDisposedException))]
844 public void MulticastLoopbackClosed ()
846 Socket sock = new Socket (AddressFamily.InterNetwork,
852 bool val = sock.MulticastLoopback;
855 /* OSSupportsIPv6 depends on the environment */
858 [Category("NotWorking")] // We have different defaults for perf reasons
859 public void ReceiveBufferSizeDefault ()
861 Socket sock = new Socket (AddressFamily.InterNetwork,
865 Assert.AreEqual (8192, sock.ReceiveBufferSize, "ReceiveBufferSizeDefault");
871 [Category("NotWorking")] // We have different defaults for perf reasons
872 public void ReceiveBufferSizeDefaultUdp ()
874 Socket sock = new Socket (AddressFamily.InterNetwork,
878 Assert.AreEqual (8192, sock.ReceiveBufferSize, "ReceiveBufferSizeDefaultUdp");
884 public void ReceiveBufferSizeChange ()
886 Socket sock = new Socket (AddressFamily.InterNetwork,
890 sock.ReceiveBufferSize = 16384;
892 Assert.AreEqual (16384, sock.ReceiveBufferSize, "ReceiveBufferSizeChange");
898 [Category("NotWorking")] // We cannot totally remove buffers (minimum is set to 256
899 public void BuffersCheck_None ()
901 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
902 int original = s.ReceiveBufferSize;
903 s.ReceiveBufferSize = 0;
904 Assert.AreEqual (0, s.ReceiveBufferSize, "ReceiveBufferSize " + original.ToString ());
906 original = s.SendBufferSize;
907 s.SendBufferSize = 0;
908 Assert.AreEqual (0, s.SendBufferSize, "SendBufferSize " + original.ToString ());
913 [ExpectedException (typeof(ObjectDisposedException))]
914 public void ReceiveBufferSizeClosed ()
916 Socket sock = new Socket (AddressFamily.InterNetwork,
922 int val = sock.ReceiveBufferSize;
926 [Category("NotWorking")] // We have different defaults for perf reasons
927 public void SendBufferSizeDefault ()
929 Socket sock = new Socket (AddressFamily.InterNetwork,
933 Assert.AreEqual (8192, sock.SendBufferSize, "SendBufferSizeDefault");
939 [Category("NotWorking")] // We have different defaults for perf reasons
940 public void SendBufferSizeDefaultUdp ()
942 Socket sock = new Socket (AddressFamily.InterNetwork,
946 Assert.AreEqual (8192, sock.SendBufferSize, "SendBufferSizeDefaultUdp");
952 public void SendBufferSizeChange ()
954 Socket sock = new Socket (AddressFamily.InterNetwork,
958 sock.SendBufferSize = 16384;
960 Assert.AreEqual (16384, sock.SendBufferSize, "SendBufferSizeChange");
966 [ExpectedException (typeof(ObjectDisposedException))]
967 public void SendBufferSizeClosed ()
969 Socket sock = new Socket (AddressFamily.InterNetwork,
975 int val = sock.SendBufferSize;
978 /* No test for TTL default as it's platform dependent */
980 public void TtlChange ()
982 Socket sock = new Socket (AddressFamily.InterNetwork,
988 Assert.AreEqual (255, sock.Ttl, "TtlChange");
994 [Category ("NotOnMac")] // Mac doesn't throw when overflowing the ttl
995 public void TtlChangeOverflow ()
997 Socket sock = new Socket (AddressFamily.InterNetwork,
1003 Assert.Fail ("TtlChangeOverflow #1");
1004 } catch (SocketException ex) {
1005 Assert.AreEqual (10022, ex.ErrorCode,
1006 "TtlChangeOverflow #2");
1008 Assert.Fail ("TtlChangeoverflow #3");
1014 /* Apparently you can set TTL=0 on the ms runtime!!
1017 Assert.Fail ("TtlChangeOverflow #4");
1018 } catch (SocketException ex) {
1019 Assert.AreEqual (10022, ex.ErrorCode,
1020 "TtlChangeOverflow #5");
1022 Assert.Fail ("TtlChangeOverflow #6");
1029 [ExpectedException (typeof(ObjectDisposedException))]
1030 public void TtlClosed ()
1032 Socket sock = new Socket (AddressFamily.InterNetwork,
1042 public void UseOnlyOverlappedIODefault ()
1044 Socket sock = new Socket (AddressFamily.InterNetwork,
1048 Assert.AreEqual (false, sock.UseOnlyOverlappedIO, "UseOnlyOverlappedIODefault");
1054 // We need this because the Linux kernel in certain configurations
1055 // will end up rounding up the values passed on to the kernel
1056 // for socket send/receive timeouts.
1058 int Approximate (int target, int value)
1062 if (value > target-10 && value < target+10)
1068 public void UseOnlyOverlappedIOChange ()
1070 Socket sock = new Socket (AddressFamily.InterNetwork,
1074 sock.UseOnlyOverlappedIO = true;
1076 Assert.AreEqual (true, sock.UseOnlyOverlappedIO, "UseOnlyOverlappedIOChange");
1082 /* Should not throw an exception */
1083 public void UseOnlyOverlappedIOClosed ()
1085 Socket sock = new Socket (AddressFamily.InterNetwork,
1091 bool val = sock.UseOnlyOverlappedIO;
1095 public void SendTimeoutDefault ()
1097 Socket sock = new Socket (AddressFamily.InterNetwork,
1101 Assert.AreEqual (0, sock.SendTimeout, "SendTimeoutDefault");
1107 public void SendTimeoutChange ()
1109 Socket sock = new Socket (AddressFamily.InterNetwork,
1113 /* Should be rounded up to 500, according to
1114 * the MSDN docs, but the MS runtime doesn't
1116 sock.SendTimeout = 50;
1117 Assert.AreEqual (50, Approximate (50, sock.SendTimeout), "SendTimeoutChange #1");
1119 sock.SendTimeout = 2000;
1120 Assert.AreEqual (2000, Approximate (2000, sock.SendTimeout), "SendTimeoutChange #2");
1122 sock.SendTimeout = 0;
1123 Assert.AreEqual (0, Approximate (0, sock.SendTimeout), "SendTimeoutChange #3");
1125 /* Should be the same as setting 0 */
1126 sock.SendTimeout = -1;
1127 Assert.AreEqual (0, sock.SendTimeout, "SendTimeoutChange #4");
1129 sock.SendTimeout = 65536;
1130 Assert.AreEqual (65536, Approximate (65536, sock.SendTimeout), "SendTimeoutChange #5");
1133 sock.SendTimeout = -2;
1134 Assert.Fail ("SendTimeoutChange #8");
1135 } catch (ArgumentOutOfRangeException) {
1137 Assert.Fail ("SendTimeoutChange #9");
1144 [ExpectedException (typeof(ObjectDisposedException))]
1145 public void SendTimeoutClosed ()
1147 Socket sock = new Socket (AddressFamily.InterNetwork,
1153 int val = sock.SendTimeout;
1157 public void ReceiveTimeoutDefault ()
1159 Socket sock = new Socket (AddressFamily.InterNetwork,
1163 Assert.AreEqual (0, sock.ReceiveTimeout, "ReceiveTimeoutDefault");
1169 public void ReceiveTimeoutChange ()
1171 Socket sock = new Socket (AddressFamily.InterNetwork,
1175 sock.ReceiveTimeout = 50;
1176 Assert.AreEqual (50, Approximate (50, sock.ReceiveTimeout), "ReceiveTimeoutChange #1");
1178 sock.ReceiveTimeout = 2000;
1179 Assert.AreEqual (2000, Approximate (2000, sock.ReceiveTimeout), "ReceiveTimeoutChange #2");
1181 sock.ReceiveTimeout = 0;
1182 Assert.AreEqual (0, sock.ReceiveTimeout, "ReceiveTimeoutChange #3");
1184 /* Should be the same as setting 0 */
1185 sock.ReceiveTimeout = -1;
1186 Assert.AreEqual (0, sock.ReceiveTimeout, "ReceiveTimeoutChange #4");
1188 sock.ReceiveTimeout = 65536;
1189 Assert.AreEqual (65536, Approximate (65536, sock.ReceiveTimeout), "ReceiveTimeoutChange #5");
1192 sock.ReceiveTimeout = -2;
1193 Assert.Fail ("ReceiveTimeoutChange #8");
1194 } catch (ArgumentOutOfRangeException) {
1196 Assert.Fail ("ReceiveTimeoutChange #9");
1203 [ExpectedException (typeof(ObjectDisposedException))]
1204 public void ReceiveTimeoutClosed ()
1206 Socket sock = new Socket (AddressFamily.InterNetwork,
1212 int val = sock.ReceiveTimeout;
1216 public void NoDelayDefaultTcp ()
1218 Socket sock = new Socket (AddressFamily.InterNetwork,
1222 Assert.AreEqual (false, sock.NoDelay, "NoDelayDefaultTcp");
1228 public void NoDelayChangeTcp ()
1230 Socket sock = new Socket (AddressFamily.InterNetwork,
1234 sock.NoDelay = true;
1236 Assert.AreEqual (true, sock.NoDelay, "NoDelayChangeTcp");
1242 public void NoDelayDefaultUdp ()
1244 Socket sock = new Socket (AddressFamily.InterNetwork,
1249 bool val = sock.NoDelay;
1250 Assert.Fail ("NoDelayDefaultUdp #1");
1251 } catch (SocketException ex) {
1252 Assert.AreEqual (10042, ex.ErrorCode,
1253 "NoDelayDefaultUdp #2");
1255 Assert.Fail ("NoDelayDefaultUdp #3");
1262 public void NoDelayChangeUdp ()
1264 Socket sock = new Socket (AddressFamily.InterNetwork,
1269 sock.NoDelay = true;
1270 Assert.Fail ("NoDelayChangeUdp #1");
1271 } catch (SocketException ex) {
1272 Assert.AreEqual (10042, ex.ErrorCode,
1273 "NoDelayChangeUdp #2");
1275 Assert.Fail ("NoDelayChangeUdp #3");
1282 [ExpectedException (typeof(ObjectDisposedException))]
1283 public void NoDelayClosed ()
1285 Socket sock = new Socket (AddressFamily.InterNetwork,
1291 bool val = sock.NoDelay;
1294 static bool BAAccepted = false;
1295 static Socket BASocket = null;
1296 static ManualResetEvent BACalledBack = new ManualResetEvent (false);
1298 private static void BACallback (IAsyncResult asyncResult)
1300 Socket sock = (Socket)asyncResult.AsyncState;
1302 BASocket = sock.EndAccept (asyncResult);
1305 BACalledBack.Set ();
1309 [ExpectedException (typeof(InvalidOperationException))]
1310 public void BeginAcceptNotBound ()
1312 Socket sock = new Socket (AddressFamily.InterNetwork,
1316 sock.BeginAccept (BACallback, sock);
1322 [ExpectedException (typeof(InvalidOperationException))]
1323 public void BeginAcceptNotListening ()
1325 Socket sock = new Socket (AddressFamily.InterNetwork,
1329 sock.Bind (new IPEndPoint (IPAddress.Any, 1236));
1331 sock.BeginAccept (BACallback, sock);
1337 public void BeginAccept ()
1339 Socket sock = new Socket (AddressFamily.InterNetwork,
1342 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
1348 BACalledBack.Reset ();
1350 sock.BeginAccept (BACallback, sock);
1352 Socket conn = new Socket (AddressFamily.InterNetwork,
1358 if (BACalledBack.WaitOne (2000, false) == false) {
1359 Assert.Fail ("BeginAccept wait timed out");
1362 Assert.AreEqual (true, BAAccepted, "BeginAccept #1");
1363 Assert.AreEqual (true, BASocket.Connected, "BeginAccept #2");
1364 Assert.AreEqual (false, sock.Connected, "BeginAccept #3");
1365 Assert.AreEqual (true, conn.Connected, "BeginAccept #4");
1373 [ExpectedException (typeof(ObjectDisposedException))]
1374 public void BeginAcceptClosed ()
1376 Socket sock = new Socket (AddressFamily.InterNetwork,
1382 sock.BeginAccept (BACallback, sock);
1385 static bool BADAccepted = false;
1386 static Socket BADSocket = null;
1387 static byte[] BADBytes;
1388 static int BADByteCount;
1389 static ManualResetEvent BADCalledBack = new ManualResetEvent (false);
1391 private static void BADCallback (IAsyncResult asyncResult)
1393 Socket sock = (Socket)asyncResult.AsyncState;
1395 BADSocket = sock.EndAccept (out BADBytes,
1400 BADCalledBack.Set ();
1404 public void BeginAcceptData ()
1406 Socket sock = new Socket (AddressFamily.InterNetwork,
1409 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
1415 BADCalledBack.Reset ();
1417 sock.BeginAccept (256, BADCallback, sock);
1419 Socket conn = new Socket (AddressFamily.InterNetwork,
1422 byte[] send_bytes = new byte[] {10, 11, 12, 13};
1425 conn.Send (send_bytes);
1427 if (BADCalledBack.WaitOne (2000, false) == false) {
1428 Assert.Fail ("BeginAcceptData wait timed out");
1431 Assert.AreEqual (true, BADAccepted, "BeginAcceptData #1");
1432 Assert.AreEqual (true, BADSocket.Connected, "BeginAcceptData #2");
1433 Assert.AreEqual (false, sock.Connected, "BeginAcceptData #3");
1434 Assert.AreEqual (true, conn.Connected, "BeginAcceptData #4");
1435 Assert.AreEqual (send_bytes.Length, BADByteCount, "BeginAcceptData #5");
1437 /* The MS runtime gives the returned data in a
1438 * much bigger array. TODO: investigate
1439 * whether it the size correlates to the first
1440 * parameter in BeginAccept()
1442 Assert.IsFalse (BADBytes.Length == send_bytes.Length,
1443 "BeginAcceptData #6");
1445 for(int i = 0; i < send_bytes.Length; i++) {
1446 Assert.AreEqual (send_bytes[i], BADBytes[i], "BeginAcceptData #" + (i+7).ToString ());
1455 [ExpectedException (typeof(ObjectDisposedException))]
1456 public void BeginAcceptDataClosed ()
1458 Socket sock = new Socket (AddressFamily.InterNetwork,
1464 sock.BeginAccept (256, BADCallback, sock);
1468 public void BeginAcceptSocketUdp ()
1470 Socket sock = new Socket (AddressFamily.InterNetwork,
1473 Socket acc = new Socket (AddressFamily.InterNetwork,
1477 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
1484 sock.BeginAccept (acc, 256, BADCallback, sock);
1485 Assert.Fail ("BeginAcceptSocketUdp #1");
1486 } catch (SocketException ex) {
1487 Assert.AreEqual (10022, ex.ErrorCode, "BeginAcceptSocketUdp #2");
1489 Assert.Fail ("BeginAcceptSocketUdp #3");
1497 public void BeginAcceptSocketBound ()
1499 Socket sock = new Socket (AddressFamily.InterNetwork,
1502 Socket acc = new Socket (AddressFamily.InterNetwork,
1506 IPEndPoint ep1 = new IPEndPoint (IPAddress.Loopback,
1509 IPEndPoint ep2 = new IPEndPoint (IPAddress.Loopback,
1518 sock.BeginAccept (acc, 256, BADCallback, sock);
1519 Assert.Fail ("BeginAcceptSocketBound #1");
1520 } catch (InvalidOperationException) {
1522 Assert.Fail ("BeginAcceptSocketBound #2");
1530 public void BeginAcceptSocket ()
1532 Socket sock = new Socket (AddressFamily.InterNetwork,
1535 Socket acc = new Socket (AddressFamily.InterNetwork,
1539 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
1545 BADCalledBack.Reset ();
1547 sock.BeginAccept (acc, 256, BADCallback, sock);
1549 Socket conn = new Socket (AddressFamily.InterNetwork,
1552 byte[] send_bytes = new byte[] {10, 11, 12, 13};
1555 conn.Send (send_bytes);
1557 if (BADCalledBack.WaitOne (2000, false) == false) {
1558 Assert.Fail ("BeginAcceptSocket wait timed out");
1561 Assert.AreEqual (true, BADAccepted, "BeginAcceptSocket #1");
1562 Assert.AreEqual (true, BADSocket.Connected, "BeginAcceptSocket #2");
1563 Assert.AreEqual (false, sock.Connected, "BeginAcceptSocket #3");
1564 Assert.AreEqual (true, conn.Connected, "BeginAcceptSocket #4");
1565 Assert.AreEqual (send_bytes.Length, BADByteCount, "BeginAcceptSocket #5");
1566 Assert.AreEqual (AddressFamily.InterNetwork, acc.AddressFamily, "BeginAcceptSocket #6");
1567 Assert.AreEqual (SocketType.Stream, acc.SocketType, "BeginAcceptSocket #7");
1568 Assert.AreEqual (ProtocolType.Tcp, acc.ProtocolType, "BeginAcceptSocket #8");
1569 Assert.AreEqual (conn.LocalEndPoint, acc.RemoteEndPoint, "BeginAcceptSocket #9");
1571 /* The MS runtime gives the returned data in a
1572 * much bigger array. TODO: investigate
1573 * whether it the size correlates to the first
1574 * parameter in BeginAccept()
1576 Assert.IsFalse (BADBytes.Length == send_bytes.Length,
1577 "BeginAcceptSocket #10");
1579 for(int i = 0; i < send_bytes.Length; i++) {
1580 Assert.AreEqual (send_bytes[i], BADBytes[i], "BeginAcceptSocket #" + (i+11).ToString ());
1590 public void BeginAcceptSocketClosed ()
1592 Socket sock = new Socket (AddressFamily.InterNetwork,
1595 Socket acc = new Socket (AddressFamily.InterNetwork,
1602 sock.BeginAccept (acc, 256, BADCallback, null);
1603 Assert.Fail ("BeginAcceptSocketClosed #1");
1604 } catch (ObjectDisposedException) {
1606 Assert.Fail ("BeginAcceptSocketClosed #2");
1613 public void BeginAcceptSocketAccClosed ()
1615 Socket sock = new Socket (AddressFamily.InterNetwork,
1618 Socket acc = new Socket (AddressFamily.InterNetwork,
1621 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
1629 BADCalledBack.Reset ();
1632 sock.BeginAccept (acc, 256, BADCallback, null);
1633 Assert.Fail ("BeginAcceptSocketAccClosed #1");
1634 } catch (ObjectDisposedException) {
1636 Assert.Fail ("BeginAcceptSocketAccClosed #2");
1642 static bool BCConnected = false;
1643 static ManualResetEvent BCCalledBack = new ManualResetEvent (false);
1645 private static void BCCallback (IAsyncResult asyncResult)
1647 Socket sock = (Socket)asyncResult.AsyncState;
1650 sock.EndConnect (asyncResult);
1651 } catch (Exception e) {
1652 Console.WriteLine ("BCCallback exception:");
1653 Console.WriteLine (e);
1660 BCCalledBack.Set ();
1664 public void BeginConnectAddressPort ()
1666 Socket sock = new Socket (AddressFamily.InterNetwork,
1669 Socket listen = new Socket (AddressFamily.InterNetwork,
1672 IPAddress ip = IPAddress.Loopback;
1673 IPEndPoint ep = new IPEndPoint (ip, 1244);
1678 BCCalledBack.Reset ();
1680 BCConnected = false;
1682 sock.BeginConnect (ip, 1244, BCCallback, sock);
1684 if (BCCalledBack.WaitOne (2000, false) == false) {
1685 Assert.Fail ("BeginConnectAddressPort wait timed out");
1688 Assert.AreEqual (true, BCConnected, "BeginConnectAddressPort #1");
1695 public void BeginConnectAddressPortNull ()
1697 Socket sock = new Socket (AddressFamily.InterNetwork,
1700 IPAddress ip = null;
1703 sock.BeginConnect (ip, 1244, BCCallback,
1705 Assert.Fail ("BeginConnectAddressPortNull #1");
1706 } catch (ArgumentNullException) {
1708 Assert.Fail ("BeginConnectAddressPortNull #2");
1715 public void BeginConnectAddressPortListen ()
1717 Socket sock = new Socket (AddressFamily.InterNetwork,
1720 IPAddress ip = IPAddress.Loopback;
1721 IPEndPoint ep = new IPEndPoint (ip, 1245);
1727 sock.BeginConnect (ip, 1245, BCCallback, sock);
1728 Assert.Fail ("BeginConnectAddressPortListen #1");
1729 } catch (InvalidOperationException) {
1731 Assert.Fail ("BeginConnectAddressPortListen #2");
1738 [ExpectedException (typeof(ObjectDisposedException))]
1739 public void BeginConnectAddressPortClosed ()
1741 Socket sock = new Socket (AddressFamily.InterNetwork,
1744 IPAddress ip = IPAddress.Loopback;
1748 sock.BeginConnect (ip, 1244, BCCallback, sock);
1752 [Category ("NotOnMac")]
1754 * This is not a Mono bug.
1756 * By default, only 127.0.0.1 is enabled and you must explicitly
1757 * enable additional addresses using 'sudo ifconfig lo0 alias 127.0.0.1'.
1759 * I tested this on Mac OS 10.7.4; a 'ping 127.0.0.2' does not work
1760 * until I add that alias.
1763 public void BeginConnectMultiple ()
1765 Socket sock = new Socket (AddressFamily.InterNetwork,
1768 Socket listen = new Socket (AddressFamily.InterNetwork,
1771 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
1773 IPAddress[] ips = new IPAddress[4];
1775 ips[0] = IPAddress.Parse ("127.0.0.4");
1776 ips[1] = IPAddress.Parse ("127.0.0.3");
1777 ips[2] = IPAddress.Parse ("127.0.0.2");
1778 ips[3] = IPAddress.Parse ("127.0.0.1");
1783 BCCalledBack.Reset ();
1785 BCConnected = false;
1787 sock.BeginConnect (ips, 1246, BCCallback, sock);
1789 /* Longer wait here, because the ms runtime
1790 * takes a lot longer to not connect
1793 if (BCCalledBack.WaitOne (30000, false) == false) {
1794 Assert.Fail ("BeginConnectMultiple wait failed");
1798 var sw = new global::System.Diagnostics.Stopwatch ();
1801 BCCalledBack.WaitOne ();
1804 Console.WriteLine (sw.ElapsedMilliseconds);
1806 if (sw.ElapsedMilliseconds > 30000)
1807 Assert.Fail ("BeginConnectMultiple wait failed");
1809 Assert.AreEqual (true, BCConnected, "BeginConnectMultiple #1");
1810 Assert.AreEqual (AddressFamily.InterNetwork, sock.RemoteEndPoint.AddressFamily, "BeginConnectMultiple #2");
1811 IPEndPoint remep = (IPEndPoint)sock.RemoteEndPoint;
1813 Assert.AreEqual (IPAddress.Loopback, remep.Address, "BeginConnectMultiple #2");
1820 public void BeginConnectMultiple2 ()
1822 Socket sock = new Socket (AddressFamily.InterNetwork,
1825 Socket listen = new Socket (AddressFamily.InterNetwork,
1829 // Need at least two addresses.
1830 var ips = Dns.GetHostAddresses (string.Empty);
1832 Assert.Ignore ("This test needs at least two IP addresses.");
1834 var allIps = new IPAddress [ips.Length + 1];
1835 allIps [0] = IPAddress.Loopback;
1836 ips.CopyTo (allIps, 1);
1839 * Only bind to the loopback interface, so all the non-loopback
1840 * IP addresses will fail. BeginConnect()/EndConnect() should
1841 * succeed it it can connect to at least one of the requested
1844 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 1246);
1849 BCCalledBack.Reset ();
1851 BCConnected = false;
1853 sock.BeginConnect (allIps, 1246, BCCallback, sock);
1855 /* Longer wait here, because the ms runtime
1856 * takes a lot longer to not connect
1858 if (BCCalledBack.WaitOne (10000, false) == false) {
1859 Assert.Fail ("BeginConnectMultiple2 wait failed");
1862 Assert.AreEqual (true, BCConnected, "BeginConnectMultiple2 #1");
1863 Assert.AreEqual (AddressFamily.InterNetwork, sock.RemoteEndPoint.AddressFamily, "BeginConnectMultiple2 #2");
1864 IPEndPoint remep = (IPEndPoint)sock.RemoteEndPoint;
1866 Assert.AreEqual (IPAddress.Loopback, remep.Address, "BeginConnectMultiple2 #2");
1874 public void BeginConnectMultipleNull ()
1876 Socket sock = new Socket (AddressFamily.InterNetwork,
1879 IPAddress[] ips = null;
1882 sock.BeginConnect (ips, 1246, BCCallback,
1884 Assert.Fail ("BeginConnectMultipleNull #1");
1885 } catch (ArgumentNullException) {
1887 Assert.Fail ("BeginConnectMultipleNull #2");
1894 public void BeginConnectMultipleListen ()
1896 Socket sock = new Socket (AddressFamily.InterNetwork,
1899 IPAddress[] ips = new IPAddress[4];
1900 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
1903 ips[0] = IPAddress.Parse ("127.0.0.4");
1904 ips[1] = IPAddress.Parse ("127.0.0.3");
1905 ips[2] = IPAddress.Parse ("127.0.0.2");
1906 ips[3] = IPAddress.Parse ("127.0.0.1");
1912 sock.BeginConnect (ips, 1247, BCCallback,
1914 Assert.Fail ("BeginConnectMultipleListen #1");
1915 } catch (InvalidOperationException) {
1917 Assert.Fail ("BeginConnectMultipleListen #2");
1924 [ExpectedException (typeof(ObjectDisposedException))]
1925 public void BeginConnectMultipleClosed ()
1927 Socket sock = new Socket (AddressFamily.InterNetwork,
1930 IPAddress[] ips = new IPAddress[4];
1932 ips[0] = IPAddress.Parse ("127.0.0.4");
1933 ips[1] = IPAddress.Parse ("127.0.0.3");
1934 ips[2] = IPAddress.Parse ("127.0.0.2");
1935 ips[3] = IPAddress.Parse ("127.0.0.1");
1939 sock.BeginConnect (ips, 1247, BCCallback, sock);
1943 public void BeginConnectHostPortNull ()
1945 Socket sock = new Socket (AddressFamily.InterNetwork,
1950 sock.BeginConnect ((string)null, 0,
1952 Assert.Fail ("BeginConnectHostPort #1");
1953 } catch (ArgumentNullException) {
1955 Assert.Fail ("BeginConnectHostPort #2");
1962 public void BeginConnectHostPortListen ()
1964 Socket sock = new Socket (AddressFamily.InterNetwork,
1967 IPAddress ip = IPAddress.Loopback;
1968 IPEndPoint ep = new IPEndPoint (ip, 1248);
1974 sock.BeginConnect ("localhost", 1248,
1976 Assert.Fail ("BeginConnectHostPortListen #1");
1977 } catch (InvalidOperationException) {
1979 Assert.Fail ("BeginConnectHostPortListen #2");
1986 [Category ("NotWorking")] // Need to pick a non-IP AddressFamily that "works" on both mono and ms, this one only works on ms
1987 public void BeginConnectHostPortNotIP ()
1989 Socket sock = new Socket (AddressFamily.NetBios,
1990 SocketType.Seqpacket,
1991 ProtocolType.Unspecified);
1994 sock.BeginConnect ("localhost", 0, BCCallback,
1996 Assert.Fail ("BeginConnectHostPortNotIP #1");
1997 } catch (NotSupportedException) {
1999 Assert.Fail ("BeginConnectHostPortNotIP #2");
2006 [ExpectedException (typeof(ObjectDisposedException))]
2007 public void BeginConnectHostPortClosed ()
2009 Socket sock = new Socket (AddressFamily.InterNetwork,
2015 sock.BeginConnect ("localhost", 0, BCCallback, sock);
2018 static bool BDDisconnected = false;
2019 static ManualResetEvent BDCalledBack = new ManualResetEvent (false);
2021 private static void BDCallback (IAsyncResult asyncResult)
2023 Socket sock = (Socket)asyncResult.AsyncState;
2025 sock.EndDisconnect (asyncResult);
2026 BDDisconnected = true;
2028 BDCalledBack.Set ();
2032 [Category ("NotDotNet")] // "Needs XP or later"
2033 public void BeginDisconnect ()
2035 Socket sock = new Socket (AddressFamily.InterNetwork,
2038 Socket listen = new Socket (AddressFamily.InterNetwork,
2041 IPAddress ip = IPAddress.Loopback;
2042 IPEndPoint ep = new IPEndPoint (ip, 1254);
2047 sock.Connect (ip, 1254);
2049 Assert.AreEqual (true, sock.Connected, "BeginDisconnect #1");
2051 sock.Shutdown (SocketShutdown.Both);
2053 BDCalledBack.Reset ();
2054 BDDisconnected = false;
2056 sock.BeginDisconnect (false, BDCallback, sock);
2058 if (BDCalledBack.WaitOne (2000, false) == false) {
2059 Assert.Fail ("BeginDisconnect wait timed out");
2062 Assert.AreEqual (true, BDDisconnected, "BeginDisconnect #2");
2063 Assert.AreEqual (false, sock.Connected, "BeginDisconnect #3");
2070 public void BeginReceiveSocketError ()
2075 public void BeginReceiveGeneric ()
2080 public void BeginReceiveGenericSocketError ()
2084 private static void BSCallback (IAsyncResult asyncResult)
2086 Socket sock = (Socket)asyncResult.AsyncState;
2088 sock.EndSend (asyncResult);
2092 public void BeginSendNotConnected ()
2094 Socket sock = new Socket (AddressFamily.InterNetwork,
2098 byte[] send_bytes = new byte[] {10, 11, 12, 13};
2101 sock.BeginSend (send_bytes, 0,
2103 SocketFlags.None, BSCallback,
2105 Assert.Fail ("BeginSendNotConnected #1");
2106 } catch (SocketException ex) {
2107 Assert.AreEqual (10057, ex.ErrorCode, "BeginSendNotConnected #2");
2109 Assert.Fail ("BeginSendNotConnected #3");
2116 public void BeginSendSocketError ()
2121 public void BeginSendGeneric ()
2126 public void BeginSendGenericSocketError ()
2131 public void BindTwice ()
2133 Socket sock = new Socket (AddressFamily.InterNetwork,
2136 IPEndPoint ep1 = new IPEndPoint (IPAddress.Loopback,
2138 IPEndPoint ep2 = new IPEndPoint (IPAddress.Loopback,
2145 Assert.Fail ("BindTwice #1");
2146 } catch (SocketException ex) {
2147 Assert.AreEqual (10022, ex.ErrorCode, "BindTwice #2");
2149 Assert.Fail ("BindTwice #3");
2156 public void Close ()
2158 Socket sock = new Socket (AddressFamily.InterNetwork,
2161 Socket listen = new Socket (AddressFamily.InterNetwork,
2164 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
2172 Assert.AreEqual (true, sock.Connected, "Close #1");
2176 Thread.Sleep (3000);
2178 Assert.AreEqual (false, sock.Connected, "Close #2");
2184 public void ConnectAddressPort ()
2186 Socket sock = new Socket (AddressFamily.InterNetwork,
2189 Socket listen = new Socket (AddressFamily.InterNetwork,
2192 IPAddress ip = IPAddress.Loopback;
2193 IPEndPoint ep = new IPEndPoint (ip, 1249);
2198 sock.Connect (ip, 1249);
2200 Assert.AreEqual (true, sock.Connected, "ConnectAddressPort #1");
2207 public void ConnectAddressPortNull ()
2209 Socket sock = new Socket (AddressFamily.InterNetwork,
2212 IPAddress ip = null;
2215 sock.Connect (ip, 1249);
2216 Assert.Fail ("ConnectAddressPortNull #1");
2217 } catch (ArgumentNullException) {
2219 Assert.Fail ("ConnectAddressPortNull #2");
2226 public void ConnectAddressPortListen ()
2228 Socket sock = new Socket (AddressFamily.InterNetwork,
2231 IPAddress ip = IPAddress.Loopback;
2232 IPEndPoint ep = new IPEndPoint (ip, 1250);
2238 sock.Connect (ip, 1250);
2239 Assert.Fail ("ConnectAddressPortListen #1");
2240 } catch (InvalidOperationException) {
2242 Assert.Fail ("ConnectAddressPortListen #2");
2249 [ExpectedException (typeof(ObjectDisposedException))]
2250 public void ConnectAddressPortClosed ()
2252 Socket sock = new Socket (AddressFamily.InterNetwork,
2255 IPAddress ip = IPAddress.Loopback;
2259 sock.Connect (ip, 1250);
2263 [Category ("NotOnMac")] // MacOSX trashes the fd after the failed connect attempt to 127.0.0.4
2265 * This is not a Mono bug.
2267 * By default, only 127.0.0.1 is enabled and you must explicitly
2268 * enable additional addresses using 'sudo ifconfig lo0 alias 127.0.0.1'.
2270 * I tested this on Mac OS 10.7.4; a 'ping 127.0.0.2' does not work
2271 * until I add that alias.
2273 * However, after doing so, Mac OS treats these as separate addresses, ie. attempting
2274 * to connect to 127.0.0.4 yields a connection refused.
2276 * When using Connect(), the .NET runtime also throws an exception if connecting to
2277 * any of the IP addresses fails. This is different with BeginConnect()/EndConnect()
2278 * which succeeds when it can connect to at least one of the addresses.
2281 public void ConnectMultiple ()
2283 Socket sock = new Socket (AddressFamily.InterNetwork,
2286 Socket listen = new Socket (AddressFamily.InterNetwork,
2289 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
2291 IPAddress[] ips = new IPAddress[4];
2293 ips[0] = IPAddress.Parse ("127.0.0.4");
2294 ips[1] = IPAddress.Parse ("127.0.0.3");
2295 ips[2] = IPAddress.Parse ("127.0.0.2");
2296 ips[3] = IPAddress.Parse ("127.0.0.1");
2301 sock.Connect (ips, 1251);
2303 Assert.AreEqual (true, sock.Connected, "ConnectMultiple #1");
2304 Assert.AreEqual (AddressFamily.InterNetwork, sock.RemoteEndPoint.AddressFamily, "ConnectMultiple #2");
2305 IPEndPoint remep = (IPEndPoint)sock.RemoteEndPoint;
2307 Assert.AreEqual (IPAddress.Loopback, remep.Address, "ConnectMultiple #2");
2314 public void ConnectMultiple2 ()
2316 Socket sock = new Socket (AddressFamily.InterNetwork,
2319 Socket listen = new Socket (AddressFamily.InterNetwork,
2323 // Need at least two addresses.
2324 var ips = Dns.GetHostAddresses (string.Empty);
2326 Assert.Ignore ("This test needs at least two IP addresses.");
2328 var allIps = new IPAddress [ips.Length + 1];
2329 allIps [0] = IPAddress.Loopback;
2330 ips.CopyTo (allIps, 1);
2333 * Bind to IPAddress.Any; Connect() will fail unless it can
2334 * connect to all the addresses in allIps.
2336 IPEndPoint ep = new IPEndPoint (IPAddress.Any, 1251);
2341 sock.Connect (allIps, 1251);
2343 Assert.AreEqual (true, sock.Connected, "ConnectMultiple2 #1");
2344 Assert.AreEqual (AddressFamily.InterNetwork, sock.RemoteEndPoint.AddressFamily, "ConnectMultiple2 #2");
2345 IPEndPoint remep = (IPEndPoint)sock.RemoteEndPoint;
2347 Assert.AreEqual (IPAddress.Loopback, remep.Address, "ConnectMultiple2 #3");
2354 public void ConnectMultipleNull ()
2356 Socket sock = new Socket (AddressFamily.InterNetwork,
2359 IPAddress[] ips = null;
2362 sock.Connect (ips, 1251);
2363 Assert.Fail ("ConnectMultipleNull #1");
2364 } catch (ArgumentNullException) {
2366 Assert.Fail ("ConnectMultipleNull #2");
2373 public void ConnectMultipleListen ()
2375 Socket sock = new Socket (AddressFamily.InterNetwork,
2378 IPAddress[] ips = new IPAddress[4];
2379 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
2382 ips[0] = IPAddress.Parse ("127.0.0.4");
2383 ips[1] = IPAddress.Parse ("127.0.0.3");
2384 ips[2] = IPAddress.Parse ("127.0.0.2");
2385 ips[3] = IPAddress.Parse ("127.0.0.1");
2391 sock.Connect (ips, 1252);
2392 Assert.Fail ("ConnectMultipleListen #1");
2393 } catch (InvalidOperationException) {
2395 Assert.Fail ("ConnectMultipleListen #2");
2402 [ExpectedException (typeof(ObjectDisposedException))]
2403 public void ConnectMultipleClosed ()
2405 Socket sock = new Socket (AddressFamily.InterNetwork,
2408 IPAddress[] ips = new IPAddress[4];
2410 ips[0] = IPAddress.Parse ("127.0.0.4");
2411 ips[1] = IPAddress.Parse ("127.0.0.3");
2412 ips[2] = IPAddress.Parse ("127.0.0.2");
2413 ips[3] = IPAddress.Parse ("127.0.0.1");
2417 sock.Connect (ips, 1252);
2421 public void ConnectHostPortNull ()
2423 Socket sock = new Socket (AddressFamily.InterNetwork,
2428 sock.Connect ((string)null, 0);
2429 Assert.Fail ("ConnectHostPort #1");
2430 } catch (ArgumentNullException) {
2432 Assert.Fail ("ConnectHostPort #2");
2439 public void ConnectHostPortListen ()
2441 Socket sock = new Socket (AddressFamily.InterNetwork,
2444 IPAddress ip = IPAddress.Loopback;
2445 IPEndPoint ep = new IPEndPoint (ip, 1253);
2451 sock.Connect ("localhost", 1253);
2452 Assert.Fail ("ConnectHostPortListen #1");
2453 } catch (InvalidOperationException) {
2455 Assert.Fail ("ConnectHostPortListen #2");
2462 [Category ("NotWorking")] // Need to pick a non-IP AddressFamily that "works" on both mono and ms, this one only works on ms
2463 public void ConnectHostPortNotIP ()
2465 Socket sock = new Socket (AddressFamily.NetBios,
2466 SocketType.Seqpacket,
2467 ProtocolType.Unspecified);
2470 sock.Connect ("localhost", 0);
2471 Assert.Fail ("ConnectHostPortNotIP #1");
2472 } catch (NotSupportedException) {
2474 Assert.Fail ("ConnectHostPortNotIP #2");
2481 [ExpectedException (typeof(ObjectDisposedException))]
2482 public void ConnectHostPortClosed ()
2484 Socket sock = new Socket (AddressFamily.InterNetwork,
2490 sock.Connect ("localhost", 0);
2494 [Category ("NotDotNet")] // "Needs XP or later"
2495 public void Disconnect ()
2497 Socket sock = new Socket (AddressFamily.InterNetwork,
2500 Socket listen = new Socket (AddressFamily.InterNetwork,
2503 IPAddress ip = IPAddress.Loopback;
2504 IPEndPoint ep = new IPEndPoint (ip, 1255);
2509 sock.Connect (ip, 1255);
2511 Assert.AreEqual (true, sock.Connected, "Disconnect #1");
2513 sock.Shutdown (SocketShutdown.Both);
2515 sock.Disconnect (false);
2517 Assert.AreEqual (false, sock.Connected, "BeginDisconnect #3");
2524 public void DuplicateAndClose ()
2529 public void IOControl ()
2534 public void ReceiveGeneric ()
2538 IPEndPoint endpoint = new IPEndPoint(IPAddress.Loopback, 1258);
2540 Socket listensock = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
2541 listensock.Bind (endpoint);
2542 listensock.Listen(1);
2544 Socket sendsock = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
2545 sendsock.Connect(endpoint);
2547 Socket clientsock = listensock.Accept();
2549 byte[] sendbuf = new byte[256];
2551 for(i = 0; i < 256; i++) {
2552 sendbuf[i] = (byte)i;
2554 for (i = 4; i < 6; i++) {
2555 Assert.AreEqual (sendbuf[i], (byte)i,
2556 "#1/" + i.ToString());
2560 sendsock.Send (sendbuf, 0, 256, SocketFlags.None,
2564 byte[] recvbuf = new byte[256];
2565 List<ArraySegment<byte>> recvbuflist = new List<ArraySegment<byte>>(2);
2566 recvbuflist.Add(new ArraySegment<byte>(recvbuf, 4, 2));
2567 recvbuflist.Add(new ArraySegment<byte>(recvbuf, 20, 230));
2569 clientsock.Receive (recvbuflist);
2571 /* recvbuf should now hold the first 2 bytes
2572 * of sendbuf from pos 4, and the next 230
2573 * bytes of sendbuf from pos 20
2576 for (i = 0; i < 2; i++) {
2577 Assert.AreEqual (sendbuf[i], recvbuf[i + 4],
2578 "#2/" + i.ToString());
2580 for (i = 2; i < 232; i++) {
2581 Assert.AreEqual (sendbuf[i], recvbuf[i + 18],
2582 "#2/" + i.ToString());
2586 clientsock.Close ();
2587 listensock.Close ();
2591 public void SendGeneric ()
2595 IPEndPoint endpoint = new IPEndPoint(IPAddress.Loopback, 1259);
2597 Socket listensock = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
2598 listensock.Bind (endpoint);
2599 listensock.Listen(1);
2601 Socket sendsock = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
2602 sendsock.Connect(endpoint);
2604 Socket clientsock = listensock.Accept();
2606 byte[] sendbuf = new byte[256];
2607 List<ArraySegment<byte>> sendbuflist = new List<ArraySegment<byte>>(2);
2609 sendbuflist.Add(new ArraySegment<byte>(sendbuf, 4, 2));
2610 sendbuflist.Add(new ArraySegment<byte>(sendbuf, 20, 230));
2612 for(i = 0; i < 256; i++) {
2613 sendbuf[i] = (byte)i;
2615 for (i = 4; i < 6; i++) {
2616 Assert.AreEqual (sendbuf[i], (byte)i,
2617 "#1/" + i.ToString());
2621 sendsock.Send (sendbuflist, SocketFlags.None, out err);
2624 byte[] recvbuf = new byte[256];
2626 clientsock.Receive (recvbuf);
2628 /* The first 2 bytes of recvbuf should now
2629 * hold 2 bytes of sendbuf from pos 4, and the
2630 * next 230 bytes of recvbuf should be sendbuf
2634 for (i = 0; i < 2; i++) {
2635 Assert.AreEqual (recvbuf[i], sendbuf[i + 4],
2636 "#2/" + i.ToString());
2638 for (i = 2; i < 232; i++) {
2639 Assert.AreEqual (recvbuf[i], sendbuf[i + 18],
2640 "#2/" + i.ToString());
2644 clientsock.Close ();
2645 listensock.Close ();
2649 public void ListenNotBound ()
2651 Socket sock = new Socket (AddressFamily.InterNetwork,
2657 Assert.Fail ("ListenNotBound #1");
2658 } catch (SocketException ex) {
2659 Assert.AreEqual (10022, ex.ErrorCode, "ListenNotBound #2");
2661 Assert.Fail ("ListenNotBound #3");
2668 static Socket CWRSocket;
2669 static bool CWRReceiving = true;
2670 static ManualResetEvent CWRReady = new ManualResetEvent (false);
2672 private static void CWRReceiveThread ()
2674 byte[] buf = new byte[256];
2677 CWRSocket.Receive (buf);
2678 } catch (SocketException) {
2679 CWRReceiving = false;
2686 public void CloseWhileReceiving ()
2688 CWRSocket = new Socket (AddressFamily.InterNetwork,
2691 CWRSocket.Bind (new IPEndPoint (IPAddress.Loopback,
2694 Thread recv_thread = new Thread (new ThreadStart (CWRReceiveThread));
2696 recv_thread.Start ();
2697 Thread.Sleep (250); /* Wait for the thread to be already receiving */
2700 if (CWRReady.WaitOne (1000, false) == false) {
2701 Assert.Fail ("CloseWhileReceiving wait timed out");
2704 Assert.IsFalse (CWRReceiving);
2707 static bool RRCLastRead = false;
2708 static ManualResetEvent RRCReady = new ManualResetEvent (false);
2710 private static void RRCClientThread ()
2712 byte[] bytes = new byte[8];
2715 Socket sock = new Socket (AddressFamily.InterNetwork,
2718 sock.Connect (new IPEndPoint (IPAddress.Loopback,
2721 NetworkStream stream = new NetworkStream (sock);
2723 readbyte = stream.ReadByte ();
2724 Assert.AreEqual (0, readbyte, "ReceiveRemoteClosed #1");
2726 stream.Read (bytes, 0, 0);
2728 readbyte = stream.ReadByte ();
2729 Assert.AreEqual (0, readbyte, "ReceiveRemoteClosed #2");
2731 stream.Read (bytes, 0, 0);
2733 readbyte = stream.ReadByte ();
2734 Assert.AreEqual (-1, readbyte, "ReceiveRemoteClosed #3");
2742 [Test] // Receive (Byte [])
2743 public void Receive1_Buffer_Null ()
2745 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
2749 s.Receive ((byte []) null);
2751 } catch (ArgumentNullException ex) {
2752 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
2753 Assert.IsNull (ex.InnerException, "#3");
2754 Assert.IsNotNull (ex.Message, "#4");
2755 Assert.AreEqual ("buffer", ex.ParamName, "#5");
2761 [Test] // Receive (Byte [])
2762 public void Receive1_Socket_Closed ()
2764 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
2769 s.Receive ((byte []) null);
2771 } catch (ObjectDisposedException ex) {
2772 // Cannot access a disposed object
2773 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
2774 Assert.IsNull (ex.InnerException, "#3");
2775 Assert.IsNotNull (ex.Message, "#4");
2776 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
2780 [Test] // Receive (Byte [], SocketFlags)
2781 public void Receive2_Buffer_Null ()
2783 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
2787 s.Receive ((byte []) null, (SocketFlags) 666);
2789 } catch (ArgumentNullException ex) {
2790 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
2791 Assert.IsNull (ex.InnerException, "#3");
2792 Assert.IsNotNull (ex.Message, "#4");
2793 Assert.AreEqual ("buffer", ex.ParamName, "#5");
2799 [Test] // Receive (Byte [], SocketFlags)
2800 public void Receive2_Socket_Closed ()
2802 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
2807 s.Receive ((byte []) null, (SocketFlags) 666);
2809 } catch (ObjectDisposedException ex) {
2810 // Cannot access a disposed object
2811 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
2812 Assert.IsNull (ex.InnerException, "#3");
2813 Assert.IsNotNull (ex.Message, "#4");
2814 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
2818 [Test] // Receive (Byte [], Int32, SocketFlags)
2819 public void Receive3_Buffer_Null ()
2821 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
2825 s.Receive ((byte []) null, 0, (SocketFlags) 666);
2827 } catch (ArgumentNullException ex) {
2828 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
2829 Assert.IsNull (ex.InnerException, "#3");
2830 Assert.IsNotNull (ex.Message, "#4");
2831 Assert.AreEqual ("buffer", ex.ParamName, "#5");
2837 [Test] // Receive (Byte [], Int32, SocketFlags)
2838 public void Receive3_Socket_Closed ()
2840 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
2845 s.Receive ((byte []) null, 0, (SocketFlags) 666);
2847 } catch (ObjectDisposedException ex) {
2848 // Cannot access a disposed object
2849 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
2850 Assert.IsNull (ex.InnerException, "#3");
2851 Assert.IsNotNull (ex.Message, "#4");
2852 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
2856 [Test] // Receive (Byte [], Int32, Int32, SocketFlags)
2857 public void Receive4_Buffer_Null ()
2859 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
2863 s.Receive ((byte []) null, 0, 0, (SocketFlags) 666);
2865 } catch (ArgumentNullException ex) {
2866 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
2867 Assert.IsNull (ex.InnerException, "#3");
2868 Assert.IsNotNull (ex.Message, "#4");
2869 Assert.AreEqual ("buffer", ex.ParamName, "#5");
2875 [Test] // Receive (Byte [], Int32, Int32, SocketFlags)
2876 public void Receive4_Socket_Closed ()
2878 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
2883 s.Receive ((byte []) null, 0, 0, (SocketFlags) 666);
2885 } catch (ObjectDisposedException ex) {
2886 // Cannot access a disposed object
2887 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
2888 Assert.IsNull (ex.InnerException, "#3");
2889 Assert.IsNotNull (ex.Message, "#4");
2890 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
2895 [Test] // Receive (Byte [], Int32, Int32, SocketFlags, out SocketError)
2896 public void Receive5_Buffer_Null ()
2898 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
2903 s.Receive ((byte []) null, 0, 0, SocketFlags.None, out error);
2905 } catch (ArgumentNullException ex) {
2906 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
2907 Assert.IsNull (ex.InnerException, "#3");
2908 Assert.IsNotNull (ex.Message, "#4");
2909 Assert.AreEqual ("buffer", ex.ParamName, "#5");
2915 [Test] // Receive (Byte [], Int32, Int32, SocketFlags, out SocketError)
2916 public void Receive5_Socket_Closed ()
2918 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
2924 s.Receive ((byte []) null, 0, 0, SocketFlags.None, out error);
2926 } catch (ObjectDisposedException ex) {
2927 // Cannot access a disposed object
2928 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
2929 Assert.IsNull (ex.InnerException, "#3");
2930 Assert.IsNotNull (ex.Message, "#4");
2931 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
2935 [Test] // Receive (IList<ArraySegment<Byte>>)
2936 public void Receive6_Buffers_Null ()
2938 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
2942 s.Receive ((IList<ArraySegment<byte>>) null);
2944 } catch (ArgumentNullException ex) {
2945 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
2946 Assert.IsNull (ex.InnerException, "#3");
2947 Assert.IsNotNull (ex.Message, "#4");
2948 Assert.AreEqual ("buffers", ex.ParamName, "#5");
2954 [Test] // Receive (IList<ArraySegment<Byte>>)
2955 public void Receive6_Socket_Closed ()
2957 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
2962 s.Receive ((IList<ArraySegment<byte>>) null);
2964 } catch (ObjectDisposedException ex) {
2965 // Cannot access a disposed object
2966 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
2967 Assert.IsNull (ex.InnerException, "#3");
2968 Assert.IsNotNull (ex.Message, "#4");
2969 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
2973 [Test] // Receive (IList<ArraySegment<Byte>>, SocketFlags)
2974 public void Receive7_Buffers_Null ()
2976 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
2980 s.Receive ((IList<ArraySegment<byte>>) null, (SocketFlags) 666);
2982 } catch (ArgumentNullException ex) {
2983 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
2984 Assert.IsNull (ex.InnerException, "#3");
2985 Assert.IsNotNull (ex.Message, "#4");
2986 Assert.AreEqual ("buffers", ex.ParamName, "#5");
2992 [Test] // Receive (IList<ArraySegment<Byte>>, SocketFlags)
2993 public void Receive7_Socket_Closed ()
2995 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3000 s.Receive ((IList<ArraySegment<byte>>) null, (SocketFlags) 666);
3002 } catch (ObjectDisposedException ex) {
3003 // Cannot access a disposed object
3004 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
3005 Assert.IsNull (ex.InnerException, "#3");
3006 Assert.IsNotNull (ex.Message, "#4");
3007 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
3011 [Test] // Receive (IList<ArraySegment<Byte>>, SocketFlags, out SocketError)
3012 public void Receive8_Buffers_Null ()
3014 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3019 s.Receive ((IList<ArraySegment<byte>>) null, (SocketFlags) 666,
3022 } catch (ArgumentNullException ex) {
3023 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
3024 Assert.IsNull (ex.InnerException, "#3");
3025 Assert.IsNotNull (ex.Message, "#4");
3026 Assert.AreEqual ("buffers", ex.ParamName, "#5");
3032 [Test] // Receive (IList<ArraySegment<Byte>>, SocketFlags, out SocketError)
3033 public void Receive8_Socket_Closed ()
3035 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3041 s.Receive ((IList<ArraySegment<byte>>) null, (SocketFlags) 666,
3044 } catch (ObjectDisposedException ex) {
3045 // Cannot access a disposed object
3046 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
3047 Assert.IsNull (ex.InnerException, "#3");
3048 Assert.IsNotNull (ex.Message, "#4");
3049 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
3056 [Test] // ReceiveFrom (Byte [], ref EndPoint)
3057 public void ReceiveFrom1_Buffer_Null ()
3059 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3062 EndPoint remoteEP = new IPEndPoint (IPAddress.Loopback, 8001);
3064 s.ReceiveFrom ((Byte []) null, ref remoteEP);
3066 } catch (ArgumentNullException ex) {
3067 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
3068 Assert.IsNull (ex.InnerException, "#3");
3069 Assert.IsNotNull (ex.Message, "#4");
3070 Assert.AreEqual ("buffer", ex.ParamName, "#5");
3076 [Test] // ReceiveFrom (Byte [], ref EndPoint)
3077 public void ReceiveFrom1_RemoteEP_Null ()
3079 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3082 byte [] buffer = new byte [0];
3083 EndPoint remoteEP = null;
3085 s.ReceiveFrom (buffer, ref remoteEP);
3087 } catch (ArgumentNullException ex) {
3088 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
3089 Assert.IsNull (ex.InnerException, "#3");
3090 Assert.IsNotNull (ex.Message, "#4");
3091 Assert.AreEqual ("remoteEP", ex.ParamName, "#5");
3097 [Test] // ReceiveFrom (Byte [], ref EndPoint)
3098 public void ReceiveFrom1_Socket_Closed ()
3100 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3104 EndPoint remoteEP = new IPEndPoint (IPAddress.Loopback, 8001);
3106 s.ReceiveFrom ((Byte []) null, ref remoteEP);
3108 } catch (ObjectDisposedException ex) {
3109 // Cannot access a disposed object
3110 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
3111 Assert.IsNull (ex.InnerException, "#3");
3112 Assert.IsNotNull (ex.Message, "#4");
3113 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
3117 [Test] // ReceiveFrom (Byte [], SocketFlags, ref EndPoint)
3118 public void ReceiveFrom2_Buffer_Null ()
3120 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3123 EndPoint remoteEP = new IPEndPoint (IPAddress.Loopback, 8001);
3125 s.ReceiveFrom ((Byte []) null, (SocketFlags) 666, ref remoteEP);
3127 } catch (ArgumentNullException ex) {
3128 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
3129 Assert.IsNull (ex.InnerException, "#3");
3130 Assert.IsNotNull (ex.Message, "#4");
3131 Assert.AreEqual ("buffer", ex.ParamName, "#5");
3137 [Test] // ReceiveFrom (Byte [], SocketFlags, ref EndPoint)
3138 public void ReceiveFrom2_RemoteEP_Null ()
3140 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3143 byte [] buffer = new byte [5];
3144 EndPoint remoteEP = null;
3146 s.ReceiveFrom (buffer, (SocketFlags) 666, ref remoteEP);
3148 } catch (ArgumentNullException ex) {
3149 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
3150 Assert.IsNull (ex.InnerException, "#3");
3151 Assert.IsNotNull (ex.Message, "#4");
3152 Assert.AreEqual ("remoteEP", ex.ParamName, "#5");
3158 [Test] // ReceiveFrom (Byte [], SocketFlags, ref EndPoint)
3159 public void ReceiveFrom2_Socket_Closed ()
3161 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3165 EndPoint remoteEP = new IPEndPoint (IPAddress.Loopback, 8001);
3167 s.ReceiveFrom ((Byte []) null, (SocketFlags) 666, ref remoteEP);
3169 } catch (ObjectDisposedException ex) {
3170 // Cannot access a disposed object
3171 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
3172 Assert.IsNull (ex.InnerException, "#3");
3173 Assert.IsNotNull (ex.Message, "#4");
3174 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
3178 [Test] // ReceiveFrom (Byte [], Int32, SocketFlags, ref EndPoint)
3179 public void ReceiveFrom3_Buffer_Null ()
3181 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3184 EndPoint remoteEP = new IPEndPoint (IPAddress.Loopback, 8001);
3186 s.ReceiveFrom ((Byte []) null, -1, (SocketFlags) 666,
3189 } catch (ArgumentNullException ex) {
3190 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
3191 Assert.IsNull (ex.InnerException, "#3");
3192 Assert.IsNotNull (ex.Message, "#4");
3193 Assert.AreEqual ("buffer", ex.ParamName, "#5");
3199 [Test] // ReceiveFrom (Byte [], Int32, SocketFlags, ref EndPoint)
3200 public void ReceiveFrom3_RemoteEP_Null ()
3202 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3205 byte [] buffer = new byte [5];
3206 EndPoint remoteEP = null;
3208 s.ReceiveFrom (buffer, -1, (SocketFlags) 666, ref remoteEP);
3210 } catch (ArgumentNullException ex) {
3211 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
3212 Assert.IsNull (ex.InnerException, "#3");
3213 Assert.IsNotNull (ex.Message, "#4");
3214 Assert.AreEqual ("remoteEP", ex.ParamName, "#5");
3220 [Test] // ReceiveFrom (Byte [], Int32, SocketFlags, ref EndPoint)
3221 public void ReceiveFrom3_Size_OutOfRange ()
3224 byte [] buffer = new byte [5];
3225 EndPoint remoteEP = new IPEndPoint (IPAddress.Loopback, 8001);
3228 s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3231 s.ReceiveFrom (buffer, -1, (SocketFlags) 666, ref remoteEP);
3232 Assert.Fail ("#A1");
3233 } catch (ArgumentOutOfRangeException ex) {
3234 // Specified argument was out of the range of valid values
3235 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#A2");
3236 Assert.IsNull (ex.InnerException, "#A3");
3237 Assert.IsNotNull (ex.Message, "#A4");
3238 Assert.AreEqual ("size", ex.ParamName, "#A5");
3243 // size > buffer length
3244 s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3247 s.ReceiveFrom (buffer, (buffer.Length + 1), (SocketFlags) 666,
3249 Assert.Fail ("#B1");
3250 } catch (ArgumentOutOfRangeException ex) {
3251 // Specified argument was out of the range of valid values
3252 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#B2");
3253 Assert.IsNull (ex.InnerException, "#B3");
3254 Assert.IsNotNull (ex.Message, "#B4");
3255 Assert.AreEqual ("size", ex.ParamName, "#B5");
3261 [Test] // ReceiveFrom (Byte [], Int32, SocketFlags, ref EndPoint)
3262 public void ReceiveFrom3_Socket_Closed ()
3264 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3268 EndPoint remoteEP = new IPEndPoint (IPAddress.Loopback, 8001);
3270 s.ReceiveFrom ((Byte []) null, -1, (SocketFlags) 666,
3273 } catch (ObjectDisposedException ex) {
3274 // Cannot access a disposed object
3275 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
3276 Assert.IsNull (ex.InnerException, "#3");
3277 Assert.IsNotNull (ex.Message, "#4");
3278 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
3282 [Test] // ReceiveFrom (Byte [], Int32, Int32, SocketFlags, EndPoint)
3283 public void ReceiveFrom4_Buffer_Null ()
3285 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3287 EndPoint remoteEP = new IPEndPoint (IPAddress.Loopback, 8001);
3290 s.ReceiveFrom ((Byte []) null, -1, -1, (SocketFlags) 666,
3293 } catch (ArgumentNullException ex) {
3294 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
3295 Assert.IsNull (ex.InnerException, "#3");
3296 Assert.IsNotNull (ex.Message, "#4");
3297 Assert.AreEqual ("buffer", ex.ParamName, "#5");
3301 [Test] // ReceiveFrom (Byte [], Int32, Int32, SocketFlags, EndPoint)
3302 public void ReceiveFrom4_Offset_OutOfRange ()
3305 byte [] buffer = new byte [5];
3306 EndPoint remoteEP = new IPEndPoint (IPAddress.Loopback, 8001);
3309 s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3312 s.ReceiveFrom (buffer, -1, 0, (SocketFlags) 666,
3314 Assert.Fail ("#A1");
3315 } catch (ArgumentOutOfRangeException ex) {
3316 // Specified argument was out of the range of valid values
3317 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#A2");
3318 Assert.IsNull (ex.InnerException, "#A3");
3319 Assert.IsNotNull (ex.Message, "#A4");
3320 Assert.AreEqual ("offset", ex.ParamName, "#A5");
3325 // offset > buffer length
3326 s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3329 s.ReceiveFrom (buffer, (buffer.Length + 1), 0, (SocketFlags) 666,
3331 Assert.Fail ("#B1");
3332 } catch (ArgumentOutOfRangeException ex) {
3333 // Specified argument was out of the range of valid values
3334 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#B2");
3335 Assert.IsNull (ex.InnerException, "#B3");
3336 Assert.IsNotNull (ex.Message, "#B4");
3337 Assert.AreEqual ("offset", ex.ParamName, "#B5");
3343 [Test] // ReceiveFrom (Byte [], Int32, Int32, SocketFlags, ref IPEndPoint)
3344 public void ReceiveFrom4_RemoteEP_Null ()
3346 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3348 byte [] buffer = new byte [5];
3349 EndPoint remoteEP = null;
3352 s.ReceiveFrom (buffer, -1, -1, (SocketFlags) 666, ref remoteEP);
3354 } catch (ArgumentNullException ex) {
3355 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
3356 Assert.IsNull (ex.InnerException, "#3");
3357 Assert.IsNotNull (ex.Message, "#4");
3358 Assert.AreEqual ("remoteEP", ex.ParamName, "#5");
3364 [Test] // ReceiveFrom (Byte [], Int32, Int32, SocketFlags, EndPoint)
3365 public void ReceiveFrom4_Size_OutOfRange ()
3368 byte [] buffer = new byte [5];
3369 EndPoint remoteEP = new IPEndPoint (IPAddress.Loopback, 8001);
3372 s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3375 s.ReceiveFrom (buffer, 0, -1, (SocketFlags) 666,
3377 Assert.Fail ("#A1");
3378 } catch (ArgumentOutOfRangeException ex) {
3379 // Specified argument was out of the range of valid values
3380 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#A2");
3381 Assert.IsNull (ex.InnerException, "#A3");
3382 Assert.IsNotNull (ex.Message, "#A4");
3383 Assert.AreEqual ("size", ex.ParamName, "#A5");
3388 // size > buffer length
3389 s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3392 s.ReceiveFrom (buffer, 0, (buffer.Length + 1), (SocketFlags) 666,
3394 Assert.Fail ("#B1");
3395 } catch (ArgumentOutOfRangeException ex) {
3396 // Specified argument was out of the range of valid values
3397 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#B2");
3398 Assert.IsNull (ex.InnerException, "#B3");
3399 Assert.IsNotNull (ex.Message, "#B4");
3400 Assert.AreEqual ("size", ex.ParamName, "#B5");
3405 // offset + size > buffer length
3406 s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3409 s.ReceiveFrom (buffer, 2, 4, (SocketFlags) 666, ref remoteEP);
3410 Assert.Fail ("#C1");
3411 } catch (ArgumentOutOfRangeException ex) {
3412 // Specified argument was out of the range of valid values
3413 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#C2");
3414 Assert.IsNull (ex.InnerException, "#C3");
3415 Assert.IsNotNull (ex.Message, "#C4");
3416 Assert.AreEqual ("size", ex.ParamName, "#C5");
3422 [Test] // ReceiveFrom (Byte [], Int32, Int32, SocketFlags, ref EndPoint)
3423 public void ReceiveFrom4_Socket_Closed ()
3425 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3429 byte [] buffer = new byte [5];
3430 EndPoint remoteEP = new IPEndPoint (IPAddress.Loopback, 8001);
3432 s.ReceiveFrom (buffer, -1, -1, (SocketFlags) 666,
3435 } catch (ObjectDisposedException ex) {
3436 // Cannot access a disposed object
3437 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
3438 Assert.IsNull (ex.InnerException, "#3");
3439 Assert.IsNotNull (ex.Message, "#4");
3440 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
3445 public void ReceiveRemoteClosed ()
3447 Socket sock = new Socket (AddressFamily.InterNetwork,
3450 sock.Bind (new IPEndPoint (IPAddress.Loopback, 1257));
3454 Thread client_thread = new Thread (new ThreadStart (RRCClientThread));
3455 client_thread.Start ();
3457 Socket client = sock.Accept ();
3458 NetworkStream stream = new NetworkStream (client);
3459 stream.WriteByte (0x00);
3460 stream.WriteByte (0x00);
3464 RRCReady.WaitOne (1000, false);
3465 Assert.IsTrue (RRCLastRead);
3469 // Test case for bug #471580
3471 public void UdpDoubleBind ()
3473 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
3474 s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, 1);
3476 s.Bind (new IPEndPoint (IPAddress.Any, 12345));
3478 Socket ss = new Socket (AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
3479 ss.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, 1);
3481 ss.Bind (new IPEndPoint (IPAddress.Any, 12345));
3483 // If we make it this far, we succeeded.
3491 [Category ("NotOnMac")]
3492 public void ConnectedProperty ()
3494 TcpListener listener = new TcpListener (IPAddress.Loopback, 23456);
3497 Socket client = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
3498 client.Connect (IPAddress.Loopback, 23456);
3499 Socket server = listener.AcceptSocket ();
3502 server.EndSend(server.BeginSend (new byte[10], 0, 10, SocketFlags.None, null, null));
3505 server.EndReceive (server.BeginReceive (new byte[10], 0, 10, SocketFlags.None, null, null));
3508 Assert.IsTrue (!client.Connected);
3509 Assert.IsTrue (!server.Connected);
3518 [Test] // GetSocketOption (SocketOptionLevel, SocketOptionName)
3519 public void GetSocketOption1_Socket_Closed ()
3521 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
3524 s.GetSocketOption (0, 0);
3526 } catch (ObjectDisposedException ex) {
3527 // Cannot access a disposed object
3528 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
3529 Assert.IsNull (ex.InnerException, "#3");
3530 Assert.IsNotNull (ex.Message, "#4");
3531 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
3535 [Test] // GetSocketOption (SocketOptionLevel, SocketOptionName, Byte [])
3536 public void GetSocketOption2_OptionValue_Null ()
3538 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
3540 s.GetSocketOption (SocketOptionLevel.Socket, SocketOptionName.Linger,
3543 } catch (SocketException ex) {
3544 // The system detected an invalid pointer address in attempting
3545 // to use a pointer argument in a call
3546 Assert.AreEqual (typeof (SocketException), ex.GetType (), "#2");
3547 Assert.AreEqual (10014, ex.ErrorCode, "#3");
3548 Assert.IsNull (ex.InnerException, "#4");
3549 Assert.IsNotNull (ex.Message, "#5");
3550 Assert.AreEqual (10014, ex.NativeErrorCode, "#6");
3552 Assert.AreEqual (SocketError.Fault, ex.SocketErrorCode, "#7");
3557 [Test] // GetSocketOption (SocketOptionLevel, SocketOptionName, Byte [])
3558 public void GetSocketOption2_Socket_Closed ()
3560 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
3563 s.GetSocketOption (0, 0, (byte []) null);
3565 } catch (ObjectDisposedException ex) {
3566 // Cannot access a disposed object
3567 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
3568 Assert.IsNull (ex.InnerException, "#3");
3569 Assert.IsNotNull (ex.Message, "#4");
3570 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
3574 [Test] // GetSocketOption (SocketOptionLevel, SocketOptionName, Int32)
3575 public void GetSocketOption3_Socket_Closed ()
3577 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
3580 s.GetSocketOption (0, 0, 0);
3582 } catch (ObjectDisposedException ex) {
3583 // Cannot access a disposed object
3584 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
3585 Assert.IsNull (ex.InnerException, "#3");
3586 Assert.IsNotNull (ex.Message, "#4");
3587 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
3591 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Byte [])
3592 public void SetSocketOption1_DontLinger ()
3594 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
3595 s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.DontLinger,
3596 new byte [] { 0x00 });
3597 s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.DontLinger,
3598 new byte [] { 0x01 });
3602 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Byte [])
3603 public void SetSocketOption1_DontLinger_Null ()
3605 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
3607 s.SetSocketOption (SocketOptionLevel.Socket,
3608 SocketOptionName.DontLinger, (byte []) null);
3610 } catch (SocketException ex) {
3611 // The system detected an invalid pointer address in attempting
3612 // to use a pointer argument in a call
3613 Assert.AreEqual (typeof (SocketException), ex.GetType (), "#2");
3614 Assert.AreEqual (10014, ex.ErrorCode, "#3");
3615 Assert.IsNull (ex.InnerException, "#4");
3616 Assert.IsNotNull (ex.Message, "#5");
3617 Assert.AreEqual (10014, ex.NativeErrorCode, "#6");
3619 Assert.AreEqual (SocketError.Fault, ex.SocketErrorCode, "#7");
3625 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Byte [])
3626 public void SetSocketOption1_Linger_Null ()
3628 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
3630 s.SetSocketOption (SocketOptionLevel.Socket,
3631 SocketOptionName.DontLinger, (byte []) null);
3633 } catch (SocketException ex) {
3634 // The system detected an invalid pointer address in attempting
3635 // to use a pointer argument in a call
3636 Assert.AreEqual (typeof (SocketException), ex.GetType (), "#2");
3637 Assert.AreEqual (10014, ex.ErrorCode, "#3");
3638 Assert.IsNull (ex.InnerException, "#4");
3639 Assert.IsNotNull (ex.Message, "#5");
3640 Assert.AreEqual (10014, ex.NativeErrorCode, "#6");
3642 Assert.AreEqual (SocketError.Fault, ex.SocketErrorCode, "#7");
3648 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Byte [])
3649 public void SetSocketOption1_Socket_Close ()
3651 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
3654 s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.DontLinger,
3655 new byte [] { 0x00 });
3657 } catch (ObjectDisposedException ex) {
3658 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
3659 Assert.IsNull (ex.InnerException, "#3");
3660 Assert.IsNotNull (ex.Message, "#4");
3661 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
3665 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Int32)
3666 public void SetSocketOption2_DontLinger ()
3668 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
3669 s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.DontLinger, 0);
3670 s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.DontLinger, 5);
3674 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Int32)
3675 [Category ("NotWorking")]
3676 public void SetSocketOption2_Linger ()
3678 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
3679 s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.Linger, 0);
3680 s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.Linger, 5);
3684 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Int32)
3685 public void SetSocketOption2_Socket_Closed ()
3687 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
3690 s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.DontLinger, 0);
3692 } catch (ObjectDisposedException ex) {
3693 // Cannot access a disposed object
3694 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
3695 Assert.IsNull (ex.InnerException, "#3");
3696 Assert.IsNotNull (ex.Message, "#4");
3697 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
3701 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
3702 public void SetSocketOption3_AddMembershipIPv4_IPv6MulticastOption ()
3704 IPAddress mcast_addr = IPAddress.Parse ("239.255.255.250");
3706 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp)) {
3707 s.Bind (new IPEndPoint (IPAddress.Any, 1901));
3709 s.SetSocketOption (SocketOptionLevel.IP, SocketOptionName.AddMembership,
3710 new IPv6MulticastOption (mcast_addr));
3712 } catch (ArgumentException ex) {
3713 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
3714 Assert.IsNull (ex.InnerException, "#3");
3715 Assert.IsNotNull (ex.Message, "#4");
3717 // The specified value is not a valid 'MulticastOption'
3718 Assert.IsTrue (ex.Message.IndexOf ("'MulticastOption'") != -1, "#5:" + ex.Message);
3719 Assert.AreEqual ("optionValue", ex.ParamName, "#6");
3721 Assert.AreEqual ("optionValue", ex.Message, "#5");
3722 Assert.IsNull (ex.ParamName, "#6");
3728 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
3729 public void SetSocketOption3_AddMembershipIPv4_MulticastOption ()
3731 IPAddress mcast_addr = IPAddress.Parse ("239.255.255.250");
3733 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp)) {
3734 s.Bind (new IPEndPoint (IPAddress.Any, 1901));
3735 s.SetSocketOption (SocketOptionLevel.IP, SocketOptionName.AddMembership,
3736 new MulticastOption (mcast_addr));
3740 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
3741 [Category ("NotWorking")]
3742 public void SetSocketOption3_AddMembershipIPv4_Socket_NotBound ()
3744 IPAddress mcast_addr = IPAddress.Parse ("239.255.255.250");
3746 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
3748 s.SetSocketOption (SocketOptionLevel.IP, SocketOptionName.AddMembership,
3749 new MulticastOption (mcast_addr));
3751 } catch (SocketException ex) {
3752 // An invalid argument was supplied
3753 Assert.AreEqual (typeof (SocketException), ex.GetType (), "#2");
3754 Assert.AreEqual (10022, ex.ErrorCode, "#3");
3755 Assert.IsNull (ex.InnerException, "#4");
3756 Assert.IsNotNull (ex.Message, "#5");
3757 Assert.AreEqual (10022, ex.NativeErrorCode, "#6");
3759 Assert.AreEqual (SocketError.InvalidArgument, ex.SocketErrorCode, "#7");
3766 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
3767 public void SetSocketOption3_AddMembershipIPv6_IPv6MulticastOption ()
3770 if (!Socket.OSSupportsIPv6)
3772 if (!Socket.SupportsIPv6)
3774 Assert.Ignore ("IPv6 not enabled.");
3776 IPAddress mcast_addr = IPAddress.Parse ("ff02::1");
3778 using (Socket s = new Socket (AddressFamily.InterNetworkV6, SocketType.Dgram, ProtocolType.Udp)) {
3779 s.Bind (new IPEndPoint (IPAddress.IPv6Any, 1902));
3780 s.SetSocketOption (SocketOptionLevel.IPv6, SocketOptionName.AddMembership,
3781 new IPv6MulticastOption (mcast_addr));
3785 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
3786 public void SetSocketOption3_AddMembershipIPv6_MulticastOption ()
3789 if (!Socket.OSSupportsIPv6)
3791 if (!Socket.SupportsIPv6)
3793 Assert.Ignore ("IPv6 not enabled.");
3795 IPAddress mcast_addr = IPAddress.Parse ("ff02::1");
3797 using (Socket s = new Socket (AddressFamily.InterNetworkV6, SocketType.Dgram, ProtocolType.Udp)) {
3798 s.Bind (new IPEndPoint (IPAddress.IPv6Any, 1902));
3800 s.SetSocketOption (SocketOptionLevel.IPv6, SocketOptionName.AddMembership,
3801 new MulticastOption (mcast_addr));
3803 } catch (ArgumentException ex) {
3804 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
3805 Assert.IsNull (ex.InnerException, "#3");
3806 Assert.IsNotNull (ex.Message, "#4");
3808 // The specified value is not a valid 'IPv6MulticastOption'
3809 Assert.IsTrue (ex.Message.IndexOf ("'IPv6MulticastOption'") != -1, "#5:" + ex.Message);
3810 Assert.AreEqual ("optionValue", ex.ParamName, "#6");
3812 Assert.AreEqual ("optionValue", ex.Message, "#5");
3813 Assert.IsNull (ex.ParamName, "#6");
3819 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
3820 [Category ("NotWorking")]
3821 public void SetSocketOption3_AddMembershipIPv6_Socket_NotBound ()
3823 IPAddress mcast_addr = IPAddress.Parse ("ff02::1");
3825 Socket s = new Socket (AddressFamily.InterNetworkV6, SocketType.Dgram, ProtocolType.Udp);
3827 s.SetSocketOption (SocketOptionLevel.IPv6, SocketOptionName.AddMembership,
3828 new IPv6MulticastOption (mcast_addr));
3830 } catch (SocketException ex) {
3831 // An invalid argument was supplied
3832 Assert.AreEqual (typeof (SocketException), ex.GetType (), "#2");
3833 Assert.AreEqual (10022, ex.ErrorCode, "#3");
3834 Assert.IsNull (ex.InnerException, "#4");
3835 Assert.IsNotNull (ex.Message, "#5");
3836 Assert.AreEqual (10022, ex.NativeErrorCode, "#6");
3838 Assert.AreEqual (SocketError.InvalidArgument, ex.SocketErrorCode, "#7");
3845 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
3846 public void SetSocketOption3_DontLinger_Boolean ()
3848 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
3850 s.SetSocketOption (SocketOptionLevel.Socket,
3851 SocketOptionName.DontLinger, (object) false);
3853 } catch (ArgumentException ex) {
3854 // The specified value is not valid
3855 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
3856 Assert.IsNull (ex.InnerException, "#3");
3858 Assert.IsNotNull (ex.Message, "#4");
3859 Assert.AreEqual ("optionValue", ex.ParamName, "#5");
3861 Assert.AreEqual ("optionValue", ex.Message, "#4");
3862 Assert.IsNull (ex.ParamName, "#5");
3868 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
3869 public void SetSocketOption3_DontLinger_Int32 ()
3871 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
3873 s.SetSocketOption (SocketOptionLevel.Socket,
3874 SocketOptionName.DontLinger, (object) 0);
3876 } catch (ArgumentException ex) {
3877 // The specified value is not valid
3878 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
3879 Assert.IsNull (ex.InnerException, "#3");
3881 Assert.IsNotNull (ex.Message, "#4");
3882 Assert.AreEqual ("optionValue", ex.ParamName, "#5");
3884 Assert.AreEqual ("optionValue", ex.Message, "#4");
3885 Assert.IsNull (ex.ParamName, "#5");
3891 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
3892 public void SetSocketOption3_DontLinger_LingerOption ()
3894 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
3896 s.SetSocketOption (SocketOptionLevel.Socket,
3897 SocketOptionName.DontLinger, new LingerOption (true, 1000));
3899 } catch (ArgumentException ex) {
3900 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
3901 Assert.IsNull (ex.InnerException, "#3");
3903 // The specified value is not valid
3904 Assert.IsNotNull (ex.Message, "#4");
3905 Assert.AreEqual ("optionValue", ex.ParamName, "#5");
3907 Assert.AreEqual ("optionValue", ex.Message, "#4");
3908 Assert.IsNull (ex.ParamName, "#5");
3914 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
3915 public void SetSocketOption3_Linger_Boolean ()
3917 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
3919 s.SetSocketOption (SocketOptionLevel.Socket,
3920 SocketOptionName.Linger, (object) false);
3922 } catch (ArgumentException ex) {
3923 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
3924 Assert.IsNull (ex.InnerException, "#3");
3926 // The specified value is not valid
3927 Assert.IsNotNull (ex.Message, "#4");
3928 Assert.AreEqual ("optionValue", ex.ParamName, "#5");
3930 Assert.AreEqual ("optionValue", ex.Message, "#4");
3931 Assert.IsNull (ex.ParamName, "#5");
3937 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
3938 public void SetSocketOption3_Linger_Int32 ()
3940 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
3942 s.SetSocketOption (SocketOptionLevel.Socket,
3943 SocketOptionName.Linger, (object) 0);
3945 } catch (ArgumentException ex) {
3946 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
3947 Assert.IsNull (ex.InnerException, "#3");
3949 // The specified value is not valid
3950 Assert.IsNotNull (ex.Message, "#4");
3951 Assert.AreEqual ("optionValue", ex.ParamName, "#5");
3953 Assert.AreEqual ("optionValue", ex.Message, "#4");
3954 Assert.IsNull (ex.ParamName, "#5");
3960 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
3961 public void SetSocketOption3_Linger_LingerOption ()
3963 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
3964 s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.Linger,
3965 new LingerOption (false, 0));
3966 s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.Linger,
3967 new LingerOption (true, 0));
3968 s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.Linger,
3969 new LingerOption (false, 1000));
3970 s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.Linger,
3971 new LingerOption (true, 1000));
3975 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
3976 public void SetSocketOption3_DropMembershipIPv4_IPv6MulticastOption ()
3978 IPAddress mcast_addr = IPAddress.Parse ("239.255.255.250");
3980 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp)) {
3981 s.Bind (new IPEndPoint (IPAddress.Any, 1901));
3982 s.SetSocketOption (SocketOptionLevel.IP, SocketOptionName.AddMembership,
3983 new MulticastOption (mcast_addr));
3985 s.SetSocketOption (SocketOptionLevel.IP, SocketOptionName.DropMembership,
3986 new IPv6MulticastOption (mcast_addr));
3988 } catch (ArgumentException ex) {
3989 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
3990 Assert.IsNull (ex.InnerException, "#3");
3991 Assert.IsNotNull (ex.Message, "#4");
3993 // The specified value is not a valid 'MulticastOption'
3994 Assert.IsTrue (ex.Message.IndexOf ("'MulticastOption'") != -1, "#5:" + ex.Message);
3995 Assert.AreEqual ("optionValue", ex.ParamName, "#6");
3997 Assert.AreEqual ("optionValue", ex.Message, "#5");
3998 Assert.IsNull (ex.ParamName, "#6");
4004 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
4005 public void SetSocketOption3_DropMembershipIPv4_MulticastOption ()
4007 IPAddress mcast_addr = IPAddress.Parse ("239.255.255.250");
4009 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp)) {
4010 MulticastOption option = new MulticastOption (mcast_addr);
4012 s.Bind (new IPEndPoint (IPAddress.Any, 1901));
4013 s.SetSocketOption (SocketOptionLevel.IP, SocketOptionName.AddMembership,
4015 s.SetSocketOption (SocketOptionLevel.IP, SocketOptionName.DropMembership,
4020 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
4021 [Category ("NotWorking")]
4022 public void SetSocketOption3_DropMembershipIPv4_Socket_NotBound ()
4024 IPAddress mcast_addr = IPAddress.Parse ("239.255.255.250");
4026 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
4028 s.SetSocketOption (SocketOptionLevel.IP, SocketOptionName.DropMembership,
4029 new MulticastOption (mcast_addr));
4031 } catch (SocketException ex) {
4032 // An invalid argument was supplied
4033 Assert.AreEqual (typeof (SocketException), ex.GetType (), "#2");
4034 Assert.AreEqual (10022, ex.ErrorCode, "#3");
4035 Assert.IsNull (ex.InnerException, "#4");
4036 Assert.IsNotNull (ex.Message, "#5");
4037 Assert.AreEqual (10022, ex.NativeErrorCode, "#6");
4039 Assert.AreEqual (SocketError.InvalidArgument, ex.SocketErrorCode, "#7");
4046 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
4047 public void SetSocketOption3_DropMembershipIPv6_IPv6MulticastOption ()
4050 if (!Socket.OSSupportsIPv6)
4052 if (!Socket.SupportsIPv6)
4054 Assert.Ignore ("IPv6 not enabled.");
4056 using (Socket s = new Socket (AddressFamily.InterNetworkV6, SocketType.Dgram, ProtocolType.Udp)) {
4057 IPv6MulticastOption option = new IPv6MulticastOption (
4058 IPAddress.Parse ("ff02::1"));
4060 s.Bind (new IPEndPoint (IPAddress.IPv6Any, 1902));
4061 s.SetSocketOption (SocketOptionLevel.IPv6, SocketOptionName.AddMembership,
4063 s.SetSocketOption (SocketOptionLevel.IPv6, SocketOptionName.DropMembership,
4068 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
4069 public void SetSocketOption3_DropMembershipIPv6_MulticastOption ()
4072 if (!Socket.OSSupportsIPv6)
4074 if (!Socket.SupportsIPv6)
4076 Assert.Ignore ("IPv6 not enabled.");
4078 IPAddress mcast_addr = IPAddress.Parse ("ff02::1");
4080 using (Socket s = new Socket (AddressFamily.InterNetworkV6, SocketType.Dgram, ProtocolType.Udp)) {
4081 s.Bind (new IPEndPoint (IPAddress.IPv6Any, 1902));
4082 s.SetSocketOption (SocketOptionLevel.IPv6, SocketOptionName.AddMembership,
4083 new IPv6MulticastOption (mcast_addr));
4085 s.SetSocketOption (SocketOptionLevel.IPv6, SocketOptionName.DropMembership,
4086 new MulticastOption (mcast_addr));
4088 } catch (ArgumentException ex) {
4089 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
4090 Assert.IsNull (ex.InnerException, "#3");
4091 Assert.IsNotNull (ex.Message, "#4");
4093 // The specified value is not a valid 'IPv6MulticastOption'
4094 Assert.IsTrue (ex.Message.IndexOf ("'IPv6MulticastOption'") != -1, "#5:" + ex.Message);
4095 Assert.AreEqual ("optionValue", ex.ParamName, "#6");
4097 Assert.AreEqual ("optionValue", ex.Message, "#5");
4098 Assert.IsNull (ex.ParamName, "#6");
4104 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
4105 [Category ("NotWorking")]
4106 public void SetSocketOption3_DropMembershipIPv6_Socket_NotBound ()
4108 IPAddress mcast_addr = IPAddress.Parse ("ff02::1");
4110 Socket s = new Socket (AddressFamily.InterNetworkV6, SocketType.Dgram, ProtocolType.Udp);
4112 s.SetSocketOption (SocketOptionLevel.IPv6, SocketOptionName.DropMembership,
4113 new IPv6MulticastOption (mcast_addr));
4115 } catch (SocketException ex) {
4116 // An invalid argument was supplied
4117 Assert.AreEqual (typeof (SocketException), ex.GetType (), "#2");
4118 Assert.AreEqual (10022, ex.ErrorCode, "#3");
4119 Assert.IsNull (ex.InnerException, "#4");
4120 Assert.IsNotNull (ex.Message, "#5");
4121 Assert.AreEqual (10022, ex.NativeErrorCode, "#6");
4123 Assert.AreEqual (SocketError.InvalidArgument, ex.SocketErrorCode, "#7");
4130 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
4131 public void SetSocketOption3_OptionValue_Null ()
4133 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
4135 s.SetSocketOption (SocketOptionLevel.Socket,
4136 SocketOptionName.Linger, (object) null);
4138 } catch (ArgumentNullException ex) {
4139 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
4140 Assert.IsNull (ex.InnerException, "#3");
4141 Assert.IsNotNull (ex.Message, "#4");
4142 Assert.AreEqual ("optionValue", ex.ParamName, "#5");
4147 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
4148 public void SetSocketOption3_Socket_Closed ()
4150 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
4153 s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.Linger,
4154 new LingerOption (false, 0));
4156 } catch (ObjectDisposedException ex) {
4157 // Cannot access a disposed object
4158 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
4159 Assert.IsNull (ex.InnerException, "#3");
4160 Assert.IsNotNull (ex.Message, "#4");
4161 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
4166 public void SetSocketOption_MulticastInterfaceIndex_Any ()
4168 IPAddress ip = IPAddress.Parse ("239.255.255.250");
4170 using (Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp))
4172 s.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.MulticastInterface, IPAddress.HostToNetworkOrder(index));
4173 s.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership, new MulticastOption(ip, index));
4178 public void SetSocketOption_MulticastInterfaceIndex_Loopback ()
4180 IPAddress ip = IPAddress.Parse ("239.255.255.250");
4182 using (Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp))
4184 s.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.MulticastInterface, IPAddress.HostToNetworkOrder(index));
4185 s.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership, new MulticastOption(ip, index));
4190 public void SetSocketOption_MulticastInterfaceIndex_Invalid ()
4192 IPAddress ip = IPAddress.Parse ("239.255.255.250");
4194 using (Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp))
4198 s.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.MulticastInterface, IPAddress.HostToNetworkOrder(index));
4205 s.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership, new MulticastOption(ip, index));
4214 public void Shutdown_NoConnect ()
4216 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
4217 s.Bind (new IPEndPoint (IPAddress.Loopback, 0));
4220 s.Shutdown (SocketShutdown.Both);
4222 } catch (SocketException exc) {
4223 Assert.AreEqual (10057, exc.ErrorCode, "#2");
4230 [ExpectedException (typeof (NullReferenceException))]
4231 public void ReceiveAsync_Null ()
4233 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
4234 s.ReceiveAsync (null);
4239 [ExpectedException (typeof (NullReferenceException))]
4240 public void ReceiveAsync_Default ()
4242 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
4243 SocketAsyncEventArgs saea = new SocketAsyncEventArgs ();
4244 s.ReceiveAsync (saea);
4250 [ExpectedException (typeof (NullReferenceException))]
4251 public void ReceiveAsync_NullBuffer ()
4253 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
4254 SocketAsyncEventArgs saea = new SocketAsyncEventArgs ();
4255 saea.SetBuffer (null, 0, 0);
4256 s.ReceiveAsync (null);
4261 [ExpectedException (typeof (ObjectDisposedException))]
4262 public void ReceiveAsync_ClosedSocket ()
4264 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
4266 s.ReceiveAsync (null);
4270 [ExpectedException (typeof (NullReferenceException))]
4271 public void SendAsync_Null ()
4273 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
4279 [ExpectedException (typeof (NullReferenceException))]
4280 public void SendAsync_Default ()
4282 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
4283 SocketAsyncEventArgs saea = new SocketAsyncEventArgs ();
4290 [ExpectedException (typeof (NullReferenceException))]
4291 public void SendAsync_NullBuffer ()
4293 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
4294 SocketAsyncEventArgs saea = new SocketAsyncEventArgs ();
4295 saea.SetBuffer (null, 0, 0);
4301 [ExpectedException (typeof (ObjectDisposedException))]
4302 public void SendAsync_ClosedSocket ()
4304 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
4310 public void SendAsyncFile ()
4312 Socket serverSocket = StartSocketServer ();
4314 Socket clientSocket = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
4315 clientSocket.Connect (serverSocket.LocalEndPoint);
4316 clientSocket.NoDelay = true;
4318 // Initialize buffer used to create testing file
4319 var buffer = new byte [1024];
4320 for (int i = 0; i < 1024; ++i)
4321 buffer [i] = (byte) (i % 256);
4323 string temp = Path.GetTempFileName ();
4325 // Testing file creation
4326 using (StreamWriter sw = new StreamWriter (temp)) {
4330 var m = new ManualResetEvent (false);
4332 // Async Send File to server
4333 clientSocket.BeginSendFile(temp, (ar) => {
4334 Socket client = (Socket) ar.AsyncState;
4335 client.EndSendFile (ar);
4339 if (!m.WaitOne (1500))
4340 throw new TimeoutException ();
4343 if (File.Exists (temp))
4346 clientSocket.Close ();
4347 serverSocket.Close ();
4351 Socket StartSocketServer ()
4354 Socket listenSocket = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
4356 listenSocket.Bind (new IPEndPoint (IPAddress.Loopback, 8001));
4357 listenSocket.Listen (1);
4359 listenSocket.BeginAccept (new AsyncCallback (ReceiveCallback), listenSocket);
4361 return listenSocket;
4364 public static void ReceiveCallback (IAsyncResult AsyncCall)
4366 byte[] bytes = new byte [1024];
4368 Socket listener = (Socket)AsyncCall.AsyncState;
4369 Socket client = listener.EndAccept (AsyncCall);
4371 client.Receive (bytes, bytes.Length, 0);