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 Assert.IsTrue (BCCalledBack.WaitOne (30000), "#0");
1800 Assert.AreEqual (true, BCConnected, "BeginConnectMultiple #1");
1801 Assert.AreEqual (AddressFamily.InterNetwork, sock.RemoteEndPoint.AddressFamily, "BeginConnectMultiple #2");
1802 IPEndPoint remep = (IPEndPoint)sock.RemoteEndPoint;
1804 Assert.AreEqual (IPAddress.Loopback, remep.Address, "BeginConnectMultiple #2");
1811 public void BeginConnectMultiple2 ()
1813 Socket sock = new Socket (AddressFamily.InterNetwork,
1816 Socket listen = new Socket (AddressFamily.InterNetwork,
1820 // Need at least two addresses.
1821 var ips = Dns.GetHostAddresses (string.Empty);
1823 Assert.Ignore ("This test needs at least two IP addresses.");
1825 var allIps = new IPAddress [ips.Length + 1];
1826 allIps [0] = IPAddress.Loopback;
1827 ips.CopyTo (allIps, 1);
1830 * Only bind to the loopback interface, so all the non-loopback
1831 * IP addresses will fail. BeginConnect()/EndConnect() should
1832 * succeed it it can connect to at least one of the requested
1835 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 1246);
1840 BCCalledBack.Reset ();
1842 BCConnected = false;
1844 sock.BeginConnect (allIps, 1246, BCCallback, sock);
1846 /* Longer wait here, because the ms runtime
1847 * takes a lot longer to not connect
1849 if (BCCalledBack.WaitOne (10000, false) == false) {
1850 Assert.Fail ("BeginConnectMultiple2 wait failed");
1853 Assert.AreEqual (true, BCConnected, "BeginConnectMultiple2 #1");
1854 Assert.AreEqual (AddressFamily.InterNetwork, sock.RemoteEndPoint.AddressFamily, "BeginConnectMultiple2 #2");
1855 IPEndPoint remep = (IPEndPoint)sock.RemoteEndPoint;
1857 Assert.AreEqual (IPAddress.Loopback, remep.Address, "BeginConnectMultiple2 #2");
1865 public void BeginConnectMultipleNull ()
1867 Socket sock = new Socket (AddressFamily.InterNetwork,
1870 IPAddress[] ips = null;
1873 sock.BeginConnect (ips, 1246, BCCallback,
1875 Assert.Fail ("BeginConnectMultipleNull #1");
1876 } catch (ArgumentNullException) {
1878 Assert.Fail ("BeginConnectMultipleNull #2");
1885 public void BeginConnectMultipleListen ()
1887 Socket sock = new Socket (AddressFamily.InterNetwork,
1890 IPAddress[] ips = new IPAddress[4];
1891 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
1894 ips[0] = IPAddress.Parse ("127.0.0.4");
1895 ips[1] = IPAddress.Parse ("127.0.0.3");
1896 ips[2] = IPAddress.Parse ("127.0.0.2");
1897 ips[3] = IPAddress.Parse ("127.0.0.1");
1903 sock.BeginConnect (ips, 1247, BCCallback,
1905 Assert.Fail ("BeginConnectMultipleListen #1");
1906 } catch (InvalidOperationException) {
1908 Assert.Fail ("BeginConnectMultipleListen #2");
1915 [ExpectedException (typeof(ObjectDisposedException))]
1916 public void BeginConnectMultipleClosed ()
1918 Socket sock = new Socket (AddressFamily.InterNetwork,
1921 IPAddress[] ips = new IPAddress[4];
1923 ips[0] = IPAddress.Parse ("127.0.0.4");
1924 ips[1] = IPAddress.Parse ("127.0.0.3");
1925 ips[2] = IPAddress.Parse ("127.0.0.2");
1926 ips[3] = IPAddress.Parse ("127.0.0.1");
1930 sock.BeginConnect (ips, 1247, BCCallback, sock);
1934 public void BeginConnectHostPortNull ()
1936 Socket sock = new Socket (AddressFamily.InterNetwork,
1941 sock.BeginConnect ((string)null, 0,
1943 Assert.Fail ("BeginConnectHostPort #1");
1944 } catch (ArgumentNullException) {
1946 Assert.Fail ("BeginConnectHostPort #2");
1953 public void BeginConnectHostPortListen ()
1955 Socket sock = new Socket (AddressFamily.InterNetwork,
1958 IPAddress ip = IPAddress.Loopback;
1959 IPEndPoint ep = new IPEndPoint (ip, 1248);
1965 sock.BeginConnect ("localhost", 1248,
1967 Assert.Fail ("BeginConnectHostPortListen #1");
1968 } catch (InvalidOperationException) {
1970 Assert.Fail ("BeginConnectHostPortListen #2");
1977 [Category ("NotWorking")] // Need to pick a non-IP AddressFamily that "works" on both mono and ms, this one only works on ms
1978 public void BeginConnectHostPortNotIP ()
1980 Socket sock = new Socket (AddressFamily.NetBios,
1981 SocketType.Seqpacket,
1982 ProtocolType.Unspecified);
1985 sock.BeginConnect ("localhost", 0, BCCallback,
1987 Assert.Fail ("BeginConnectHostPortNotIP #1");
1988 } catch (NotSupportedException) {
1990 Assert.Fail ("BeginConnectHostPortNotIP #2");
1997 [ExpectedException (typeof(ObjectDisposedException))]
1998 public void BeginConnectHostPortClosed ()
2000 Socket sock = new Socket (AddressFamily.InterNetwork,
2006 sock.BeginConnect ("localhost", 0, BCCallback, sock);
2009 static bool BDDisconnected = false;
2010 static ManualResetEvent BDCalledBack = new ManualResetEvent (false);
2012 private static void BDCallback (IAsyncResult asyncResult)
2014 Socket sock = (Socket)asyncResult.AsyncState;
2016 sock.EndDisconnect (asyncResult);
2017 BDDisconnected = true;
2019 BDCalledBack.Set ();
2023 [Category ("NotDotNet")] // "Needs XP or later"
2024 public void BeginDisconnect ()
2026 Socket sock = new Socket (AddressFamily.InterNetwork,
2029 Socket listen = new Socket (AddressFamily.InterNetwork,
2032 IPAddress ip = IPAddress.Loopback;
2033 IPEndPoint ep = new IPEndPoint (ip, 1254);
2038 sock.Connect (ip, 1254);
2040 Assert.AreEqual (true, sock.Connected, "BeginDisconnect #1");
2042 sock.Shutdown (SocketShutdown.Both);
2044 BDCalledBack.Reset ();
2045 BDDisconnected = false;
2047 sock.BeginDisconnect (false, BDCallback, sock);
2049 if (BDCalledBack.WaitOne (2000, false) == false) {
2050 Assert.Fail ("BeginDisconnect wait timed out");
2053 Assert.AreEqual (true, BDDisconnected, "BeginDisconnect #2");
2054 Assert.AreEqual (false, sock.Connected, "BeginDisconnect #3");
2061 public void BeginReceiveSocketError ()
2066 public void BeginReceiveGeneric ()
2071 public void BeginReceiveGenericSocketError ()
2075 private static void BSCallback (IAsyncResult asyncResult)
2077 Socket sock = (Socket)asyncResult.AsyncState;
2079 sock.EndSend (asyncResult);
2083 public void BeginSendNotConnected ()
2085 Socket sock = new Socket (AddressFamily.InterNetwork,
2089 byte[] send_bytes = new byte[] {10, 11, 12, 13};
2092 sock.BeginSend (send_bytes, 0,
2094 SocketFlags.None, BSCallback,
2096 Assert.Fail ("BeginSendNotConnected #1");
2097 } catch (SocketException ex) {
2098 Assert.AreEqual (10057, ex.ErrorCode, "BeginSendNotConnected #2");
2100 Assert.Fail ("BeginSendNotConnected #3");
2107 public void BeginSendSocketError ()
2112 public void BeginSendGeneric ()
2117 public void BeginSendGenericSocketError ()
2122 public void BindTwice ()
2124 Socket sock = new Socket (AddressFamily.InterNetwork,
2127 IPEndPoint ep1 = new IPEndPoint (IPAddress.Loopback,
2129 IPEndPoint ep2 = new IPEndPoint (IPAddress.Loopback,
2136 Assert.Fail ("BindTwice #1");
2137 } catch (SocketException ex) {
2138 Assert.AreEqual (10022, ex.ErrorCode, "BindTwice #2");
2140 Assert.Fail ("BindTwice #3");
2147 public void Close ()
2149 Socket sock = new Socket (AddressFamily.InterNetwork,
2152 Socket listen = new Socket (AddressFamily.InterNetwork,
2155 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
2163 Assert.AreEqual (true, sock.Connected, "Close #1");
2167 Thread.Sleep (3000);
2169 Assert.AreEqual (false, sock.Connected, "Close #2");
2175 public void ConnectAddressPort ()
2177 Socket sock = new Socket (AddressFamily.InterNetwork,
2180 Socket listen = new Socket (AddressFamily.InterNetwork,
2183 IPAddress ip = IPAddress.Loopback;
2184 IPEndPoint ep = new IPEndPoint (ip, 1249);
2189 sock.Connect (ip, 1249);
2191 Assert.AreEqual (true, sock.Connected, "ConnectAddressPort #1");
2198 public void ConnectAddressPortNull ()
2200 Socket sock = new Socket (AddressFamily.InterNetwork,
2203 IPAddress ip = null;
2206 sock.Connect (ip, 1249);
2207 Assert.Fail ("ConnectAddressPortNull #1");
2208 } catch (ArgumentNullException) {
2210 Assert.Fail ("ConnectAddressPortNull #2");
2217 public void ConnectAddressPortListen ()
2219 Socket sock = new Socket (AddressFamily.InterNetwork,
2222 IPAddress ip = IPAddress.Loopback;
2223 IPEndPoint ep = new IPEndPoint (ip, 1250);
2229 sock.Connect (ip, 1250);
2230 Assert.Fail ("ConnectAddressPortListen #1");
2231 } catch (InvalidOperationException) {
2233 Assert.Fail ("ConnectAddressPortListen #2");
2240 [ExpectedException (typeof(ObjectDisposedException))]
2241 public void ConnectAddressPortClosed ()
2243 Socket sock = new Socket (AddressFamily.InterNetwork,
2246 IPAddress ip = IPAddress.Loopback;
2250 sock.Connect (ip, 1250);
2254 [Category ("NotOnMac")] // MacOSX trashes the fd after the failed connect attempt to 127.0.0.4
2256 * This is not a Mono bug.
2258 * By default, only 127.0.0.1 is enabled and you must explicitly
2259 * enable additional addresses using 'sudo ifconfig lo0 alias 127.0.0.1'.
2261 * I tested this on Mac OS 10.7.4; a 'ping 127.0.0.2' does not work
2262 * until I add that alias.
2264 * However, after doing so, Mac OS treats these as separate addresses, ie. attempting
2265 * to connect to 127.0.0.4 yields a connection refused.
2267 * When using Connect(), the .NET runtime also throws an exception if connecting to
2268 * any of the IP addresses fails. This is different with BeginConnect()/EndConnect()
2269 * which succeeds when it can connect to at least one of the addresses.
2272 public void ConnectMultiple ()
2274 Socket sock = new Socket (AddressFamily.InterNetwork,
2277 Socket listen = new Socket (AddressFamily.InterNetwork,
2280 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
2282 IPAddress[] ips = new IPAddress[4];
2284 ips[0] = IPAddress.Parse ("127.0.0.4");
2285 ips[1] = IPAddress.Parse ("127.0.0.3");
2286 ips[2] = IPAddress.Parse ("127.0.0.2");
2287 ips[3] = IPAddress.Parse ("127.0.0.1");
2292 sock.Connect (ips, 1251);
2294 Assert.AreEqual (true, sock.Connected, "ConnectMultiple #1");
2295 Assert.AreEqual (AddressFamily.InterNetwork, sock.RemoteEndPoint.AddressFamily, "ConnectMultiple #2");
2296 IPEndPoint remep = (IPEndPoint)sock.RemoteEndPoint;
2298 Assert.AreEqual (IPAddress.Loopback, remep.Address, "ConnectMultiple #2");
2305 public void ConnectMultiple2 ()
2307 Socket sock = new Socket (AddressFamily.InterNetwork,
2310 Socket listen = new Socket (AddressFamily.InterNetwork,
2314 // Need at least two addresses.
2315 var ips = Dns.GetHostAddresses (string.Empty);
2317 Assert.Ignore ("This test needs at least two IP addresses.");
2319 var allIps = new IPAddress [ips.Length + 1];
2320 allIps [0] = IPAddress.Loopback;
2321 ips.CopyTo (allIps, 1);
2324 * Bind to IPAddress.Any; Connect() will fail unless it can
2325 * connect to all the addresses in allIps.
2327 IPEndPoint ep = new IPEndPoint (IPAddress.Any, 1251);
2332 sock.Connect (allIps, 1251);
2334 Assert.AreEqual (true, sock.Connected, "ConnectMultiple2 #1");
2335 Assert.AreEqual (AddressFamily.InterNetwork, sock.RemoteEndPoint.AddressFamily, "ConnectMultiple2 #2");
2336 IPEndPoint remep = (IPEndPoint)sock.RemoteEndPoint;
2338 Assert.AreEqual (IPAddress.Loopback, remep.Address, "ConnectMultiple2 #3");
2345 public void ConnectMultipleNull ()
2347 Socket sock = new Socket (AddressFamily.InterNetwork,
2350 IPAddress[] ips = null;
2353 sock.Connect (ips, 1251);
2354 Assert.Fail ("ConnectMultipleNull #1");
2355 } catch (ArgumentNullException) {
2357 Assert.Fail ("ConnectMultipleNull #2");
2364 public void ConnectMultipleListen ()
2366 Socket sock = new Socket (AddressFamily.InterNetwork,
2369 IPAddress[] ips = new IPAddress[4];
2370 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
2373 ips[0] = IPAddress.Parse ("127.0.0.4");
2374 ips[1] = IPAddress.Parse ("127.0.0.3");
2375 ips[2] = IPAddress.Parse ("127.0.0.2");
2376 ips[3] = IPAddress.Parse ("127.0.0.1");
2382 sock.Connect (ips, 1252);
2383 Assert.Fail ("ConnectMultipleListen #1");
2384 } catch (InvalidOperationException) {
2386 Assert.Fail ("ConnectMultipleListen #2");
2393 [ExpectedException (typeof(ObjectDisposedException))]
2394 public void ConnectMultipleClosed ()
2396 Socket sock = new Socket (AddressFamily.InterNetwork,
2399 IPAddress[] ips = new IPAddress[4];
2401 ips[0] = IPAddress.Parse ("127.0.0.4");
2402 ips[1] = IPAddress.Parse ("127.0.0.3");
2403 ips[2] = IPAddress.Parse ("127.0.0.2");
2404 ips[3] = IPAddress.Parse ("127.0.0.1");
2408 sock.Connect (ips, 1252);
2412 public void ConnectHostPortNull ()
2414 Socket sock = new Socket (AddressFamily.InterNetwork,
2419 sock.Connect ((string)null, 0);
2420 Assert.Fail ("ConnectHostPort #1");
2421 } catch (ArgumentNullException) {
2423 Assert.Fail ("ConnectHostPort #2");
2430 public void ConnectHostPortListen ()
2432 Socket sock = new Socket (AddressFamily.InterNetwork,
2435 IPAddress ip = IPAddress.Loopback;
2436 IPEndPoint ep = new IPEndPoint (ip, 1253);
2442 sock.Connect ("localhost", 1253);
2443 Assert.Fail ("ConnectHostPortListen #1");
2444 } catch (InvalidOperationException) {
2446 Assert.Fail ("ConnectHostPortListen #2");
2453 [Category ("NotWorking")] // Need to pick a non-IP AddressFamily that "works" on both mono and ms, this one only works on ms
2454 public void ConnectHostPortNotIP ()
2456 Socket sock = new Socket (AddressFamily.NetBios,
2457 SocketType.Seqpacket,
2458 ProtocolType.Unspecified);
2461 sock.Connect ("localhost", 0);
2462 Assert.Fail ("ConnectHostPortNotIP #1");
2463 } catch (NotSupportedException) {
2465 Assert.Fail ("ConnectHostPortNotIP #2");
2472 [ExpectedException (typeof(ObjectDisposedException))]
2473 public void ConnectHostPortClosed ()
2475 Socket sock = new Socket (AddressFamily.InterNetwork,
2481 sock.Connect ("localhost", 0);
2485 [Category ("NotDotNet")] // "Needs XP or later"
2486 public void Disconnect ()
2488 Socket sock = new Socket (AddressFamily.InterNetwork,
2491 Socket listen = new Socket (AddressFamily.InterNetwork,
2494 IPAddress ip = IPAddress.Loopback;
2495 IPEndPoint ep = new IPEndPoint (ip, 1255);
2500 sock.Connect (ip, 1255);
2502 Assert.AreEqual (true, sock.Connected, "Disconnect #1");
2504 sock.Shutdown (SocketShutdown.Both);
2506 sock.Disconnect (false);
2508 Assert.AreEqual (false, sock.Connected, "BeginDisconnect #3");
2515 public void DuplicateAndClose ()
2520 public void IOControl ()
2525 public void ReceiveGeneric ()
2529 IPEndPoint endpoint = new IPEndPoint(IPAddress.Loopback, 1258);
2531 Socket listensock = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
2532 listensock.Bind (endpoint);
2533 listensock.Listen(1);
2535 Socket sendsock = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
2536 sendsock.Connect(endpoint);
2538 Socket clientsock = listensock.Accept();
2540 byte[] sendbuf = new byte[256];
2542 for(i = 0; i < 256; i++) {
2543 sendbuf[i] = (byte)i;
2545 for (i = 4; i < 6; i++) {
2546 Assert.AreEqual (sendbuf[i], (byte)i,
2547 "#1/" + i.ToString());
2551 sendsock.Send (sendbuf, 0, 256, SocketFlags.None,
2555 byte[] recvbuf = new byte[256];
2556 List<ArraySegment<byte>> recvbuflist = new List<ArraySegment<byte>>(2);
2557 recvbuflist.Add(new ArraySegment<byte>(recvbuf, 4, 2));
2558 recvbuflist.Add(new ArraySegment<byte>(recvbuf, 20, 230));
2560 clientsock.Receive (recvbuflist);
2562 /* recvbuf should now hold the first 2 bytes
2563 * of sendbuf from pos 4, and the next 230
2564 * bytes of sendbuf from pos 20
2567 for (i = 0; i < 2; i++) {
2568 Assert.AreEqual (sendbuf[i], recvbuf[i + 4],
2569 "#2/" + i.ToString());
2571 for (i = 2; i < 232; i++) {
2572 Assert.AreEqual (sendbuf[i], recvbuf[i + 18],
2573 "#2/" + i.ToString());
2577 clientsock.Close ();
2578 listensock.Close ();
2582 public void SendGeneric ()
2586 IPEndPoint endpoint = new IPEndPoint(IPAddress.Loopback, 1259);
2588 Socket listensock = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
2589 listensock.Bind (endpoint);
2590 listensock.Listen(1);
2592 Socket sendsock = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
2593 sendsock.Connect(endpoint);
2595 Socket clientsock = listensock.Accept();
2597 byte[] sendbuf = new byte[256];
2598 List<ArraySegment<byte>> sendbuflist = new List<ArraySegment<byte>>(2);
2600 sendbuflist.Add(new ArraySegment<byte>(sendbuf, 4, 2));
2601 sendbuflist.Add(new ArraySegment<byte>(sendbuf, 20, 230));
2603 for(i = 0; i < 256; i++) {
2604 sendbuf[i] = (byte)i;
2606 for (i = 4; i < 6; i++) {
2607 Assert.AreEqual (sendbuf[i], (byte)i,
2608 "#1/" + i.ToString());
2612 sendsock.Send (sendbuflist, SocketFlags.None, out err);
2615 byte[] recvbuf = new byte[256];
2617 clientsock.Receive (recvbuf);
2619 /* The first 2 bytes of recvbuf should now
2620 * hold 2 bytes of sendbuf from pos 4, and the
2621 * next 230 bytes of recvbuf should be sendbuf
2625 for (i = 0; i < 2; i++) {
2626 Assert.AreEqual (recvbuf[i], sendbuf[i + 4],
2627 "#2/" + i.ToString());
2629 for (i = 2; i < 232; i++) {
2630 Assert.AreEqual (recvbuf[i], sendbuf[i + 18],
2631 "#2/" + i.ToString());
2635 clientsock.Close ();
2636 listensock.Close ();
2640 public void ListenNotBound ()
2642 Socket sock = new Socket (AddressFamily.InterNetwork,
2648 Assert.Fail ("ListenNotBound #1");
2649 } catch (SocketException ex) {
2650 Assert.AreEqual (10022, ex.ErrorCode, "ListenNotBound #2");
2652 Assert.Fail ("ListenNotBound #3");
2659 static Socket CWRSocket;
2660 static bool CWRReceiving = true;
2661 static ManualResetEvent CWRReady = new ManualResetEvent (false);
2663 private static void CWRReceiveThread ()
2665 byte[] buf = new byte[256];
2668 CWRSocket.Receive (buf);
2669 } catch (SocketException) {
2670 CWRReceiving = false;
2677 public void CloseWhileReceiving ()
2679 CWRSocket = new Socket (AddressFamily.InterNetwork,
2682 CWRSocket.Bind (new IPEndPoint (IPAddress.Loopback,
2685 Thread recv_thread = new Thread (new ThreadStart (CWRReceiveThread));
2687 recv_thread.Start ();
2688 Thread.Sleep (250); /* Wait for the thread to be already receiving */
2691 if (CWRReady.WaitOne (1000, false) == false) {
2692 Assert.Fail ("CloseWhileReceiving wait timed out");
2695 Assert.IsFalse (CWRReceiving);
2698 static bool RRCLastRead = false;
2699 static ManualResetEvent RRCReady = new ManualResetEvent (false);
2701 private static void RRCClientThread ()
2703 byte[] bytes = new byte[8];
2706 Socket sock = new Socket (AddressFamily.InterNetwork,
2709 sock.Connect (new IPEndPoint (IPAddress.Loopback,
2712 NetworkStream stream = new NetworkStream (sock);
2714 readbyte = stream.ReadByte ();
2715 Assert.AreEqual (0, readbyte, "ReceiveRemoteClosed #1");
2717 stream.Read (bytes, 0, 0);
2719 readbyte = stream.ReadByte ();
2720 Assert.AreEqual (0, readbyte, "ReceiveRemoteClosed #2");
2722 stream.Read (bytes, 0, 0);
2724 readbyte = stream.ReadByte ();
2725 Assert.AreEqual (-1, readbyte, "ReceiveRemoteClosed #3");
2733 [Test] // Receive (Byte [])
2734 public void Receive1_Buffer_Null ()
2736 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
2740 s.Receive ((byte []) null);
2742 } catch (ArgumentNullException ex) {
2743 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
2744 Assert.IsNull (ex.InnerException, "#3");
2745 Assert.IsNotNull (ex.Message, "#4");
2746 Assert.AreEqual ("buffer", ex.ParamName, "#5");
2752 [Test] // Receive (Byte [])
2753 public void Receive1_Socket_Closed ()
2755 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
2760 s.Receive ((byte []) null);
2762 } catch (ObjectDisposedException ex) {
2763 // Cannot access a disposed object
2764 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
2765 Assert.IsNull (ex.InnerException, "#3");
2766 Assert.IsNotNull (ex.Message, "#4");
2767 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
2771 [Test] // Receive (Byte [], SocketFlags)
2772 public void Receive2_Buffer_Null ()
2774 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
2778 s.Receive ((byte []) null, (SocketFlags) 666);
2780 } catch (ArgumentNullException ex) {
2781 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
2782 Assert.IsNull (ex.InnerException, "#3");
2783 Assert.IsNotNull (ex.Message, "#4");
2784 Assert.AreEqual ("buffer", ex.ParamName, "#5");
2790 [Test] // Receive (Byte [], SocketFlags)
2791 public void Receive2_Socket_Closed ()
2793 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
2798 s.Receive ((byte []) null, (SocketFlags) 666);
2800 } catch (ObjectDisposedException ex) {
2801 // Cannot access a disposed object
2802 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
2803 Assert.IsNull (ex.InnerException, "#3");
2804 Assert.IsNotNull (ex.Message, "#4");
2805 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
2809 [Test] // Receive (Byte [], Int32, SocketFlags)
2810 public void Receive3_Buffer_Null ()
2812 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
2816 s.Receive ((byte []) null, 0, (SocketFlags) 666);
2818 } catch (ArgumentNullException ex) {
2819 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
2820 Assert.IsNull (ex.InnerException, "#3");
2821 Assert.IsNotNull (ex.Message, "#4");
2822 Assert.AreEqual ("buffer", ex.ParamName, "#5");
2828 [Test] // Receive (Byte [], Int32, SocketFlags)
2829 public void Receive3_Socket_Closed ()
2831 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
2836 s.Receive ((byte []) null, 0, (SocketFlags) 666);
2838 } catch (ObjectDisposedException ex) {
2839 // Cannot access a disposed object
2840 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
2841 Assert.IsNull (ex.InnerException, "#3");
2842 Assert.IsNotNull (ex.Message, "#4");
2843 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
2847 [Test] // Receive (Byte [], Int32, Int32, SocketFlags)
2848 public void Receive4_Buffer_Null ()
2850 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
2854 s.Receive ((byte []) null, 0, 0, (SocketFlags) 666);
2856 } catch (ArgumentNullException ex) {
2857 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
2858 Assert.IsNull (ex.InnerException, "#3");
2859 Assert.IsNotNull (ex.Message, "#4");
2860 Assert.AreEqual ("buffer", ex.ParamName, "#5");
2866 [Test] // Receive (Byte [], Int32, Int32, SocketFlags)
2867 public void Receive4_Socket_Closed ()
2869 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
2874 s.Receive ((byte []) null, 0, 0, (SocketFlags) 666);
2876 } catch (ObjectDisposedException ex) {
2877 // Cannot access a disposed object
2878 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
2879 Assert.IsNull (ex.InnerException, "#3");
2880 Assert.IsNotNull (ex.Message, "#4");
2881 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
2886 [Test] // Receive (Byte [], Int32, Int32, SocketFlags, out SocketError)
2887 public void Receive5_Buffer_Null ()
2889 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
2894 s.Receive ((byte []) null, 0, 0, SocketFlags.None, out error);
2896 } catch (ArgumentNullException ex) {
2897 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
2898 Assert.IsNull (ex.InnerException, "#3");
2899 Assert.IsNotNull (ex.Message, "#4");
2900 Assert.AreEqual ("buffer", ex.ParamName, "#5");
2906 [Test] // Receive (Byte [], Int32, Int32, SocketFlags, out SocketError)
2907 public void Receive5_Socket_Closed ()
2909 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
2915 s.Receive ((byte []) null, 0, 0, SocketFlags.None, out error);
2917 } catch (ObjectDisposedException ex) {
2918 // Cannot access a disposed object
2919 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
2920 Assert.IsNull (ex.InnerException, "#3");
2921 Assert.IsNotNull (ex.Message, "#4");
2922 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
2926 [Test] // Receive (IList<ArraySegment<Byte>>)
2927 public void Receive6_Buffers_Null ()
2929 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
2933 s.Receive ((IList<ArraySegment<byte>>) null);
2935 } catch (ArgumentNullException ex) {
2936 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
2937 Assert.IsNull (ex.InnerException, "#3");
2938 Assert.IsNotNull (ex.Message, "#4");
2939 Assert.AreEqual ("buffers", ex.ParamName, "#5");
2945 [Test] // Receive (IList<ArraySegment<Byte>>)
2946 public void Receive6_Socket_Closed ()
2948 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
2953 s.Receive ((IList<ArraySegment<byte>>) null);
2955 } catch (ObjectDisposedException ex) {
2956 // Cannot access a disposed object
2957 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
2958 Assert.IsNull (ex.InnerException, "#3");
2959 Assert.IsNotNull (ex.Message, "#4");
2960 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
2964 [Test] // Receive (IList<ArraySegment<Byte>>, SocketFlags)
2965 public void Receive7_Buffers_Null ()
2967 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
2971 s.Receive ((IList<ArraySegment<byte>>) null, (SocketFlags) 666);
2973 } catch (ArgumentNullException ex) {
2974 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
2975 Assert.IsNull (ex.InnerException, "#3");
2976 Assert.IsNotNull (ex.Message, "#4");
2977 Assert.AreEqual ("buffers", ex.ParamName, "#5");
2983 [Test] // Receive (IList<ArraySegment<Byte>>, SocketFlags)
2984 public void Receive7_Socket_Closed ()
2986 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
2991 s.Receive ((IList<ArraySegment<byte>>) null, (SocketFlags) 666);
2993 } catch (ObjectDisposedException ex) {
2994 // Cannot access a disposed object
2995 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
2996 Assert.IsNull (ex.InnerException, "#3");
2997 Assert.IsNotNull (ex.Message, "#4");
2998 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
3002 [Test] // Receive (IList<ArraySegment<Byte>>, SocketFlags, out SocketError)
3003 public void Receive8_Buffers_Null ()
3005 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3010 s.Receive ((IList<ArraySegment<byte>>) null, (SocketFlags) 666,
3013 } catch (ArgumentNullException ex) {
3014 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
3015 Assert.IsNull (ex.InnerException, "#3");
3016 Assert.IsNotNull (ex.Message, "#4");
3017 Assert.AreEqual ("buffers", ex.ParamName, "#5");
3023 [Test] // Receive (IList<ArraySegment<Byte>>, SocketFlags, out SocketError)
3024 public void Receive8_Socket_Closed ()
3026 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3032 s.Receive ((IList<ArraySegment<byte>>) null, (SocketFlags) 666,
3035 } catch (ObjectDisposedException ex) {
3036 // Cannot access a disposed object
3037 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
3038 Assert.IsNull (ex.InnerException, "#3");
3039 Assert.IsNotNull (ex.Message, "#4");
3040 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
3047 [Test] // ReceiveFrom (Byte [], ref EndPoint)
3048 public void ReceiveFrom1_Buffer_Null ()
3050 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3053 EndPoint remoteEP = new IPEndPoint (IPAddress.Loopback, 8001);
3055 s.ReceiveFrom ((Byte []) null, ref remoteEP);
3057 } catch (ArgumentNullException ex) {
3058 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
3059 Assert.IsNull (ex.InnerException, "#3");
3060 Assert.IsNotNull (ex.Message, "#4");
3061 Assert.AreEqual ("buffer", ex.ParamName, "#5");
3067 [Test] // ReceiveFrom (Byte [], ref EndPoint)
3068 public void ReceiveFrom1_RemoteEP_Null ()
3070 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3073 byte [] buffer = new byte [0];
3074 EndPoint remoteEP = null;
3076 s.ReceiveFrom (buffer, ref remoteEP);
3078 } catch (ArgumentNullException ex) {
3079 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
3080 Assert.IsNull (ex.InnerException, "#3");
3081 Assert.IsNotNull (ex.Message, "#4");
3082 Assert.AreEqual ("remoteEP", ex.ParamName, "#5");
3088 [Test] // ReceiveFrom (Byte [], ref EndPoint)
3089 public void ReceiveFrom1_Socket_Closed ()
3091 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3095 EndPoint remoteEP = new IPEndPoint (IPAddress.Loopback, 8001);
3097 s.ReceiveFrom ((Byte []) null, ref remoteEP);
3099 } catch (ObjectDisposedException ex) {
3100 // Cannot access a disposed object
3101 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
3102 Assert.IsNull (ex.InnerException, "#3");
3103 Assert.IsNotNull (ex.Message, "#4");
3104 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
3108 [Test] // ReceiveFrom (Byte [], SocketFlags, ref EndPoint)
3109 public void ReceiveFrom2_Buffer_Null ()
3111 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3114 EndPoint remoteEP = new IPEndPoint (IPAddress.Loopback, 8001);
3116 s.ReceiveFrom ((Byte []) null, (SocketFlags) 666, ref remoteEP);
3118 } catch (ArgumentNullException ex) {
3119 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
3120 Assert.IsNull (ex.InnerException, "#3");
3121 Assert.IsNotNull (ex.Message, "#4");
3122 Assert.AreEqual ("buffer", ex.ParamName, "#5");
3128 [Test] // ReceiveFrom (Byte [], SocketFlags, ref EndPoint)
3129 public void ReceiveFrom2_RemoteEP_Null ()
3131 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3134 byte [] buffer = new byte [5];
3135 EndPoint remoteEP = null;
3137 s.ReceiveFrom (buffer, (SocketFlags) 666, ref remoteEP);
3139 } catch (ArgumentNullException ex) {
3140 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
3141 Assert.IsNull (ex.InnerException, "#3");
3142 Assert.IsNotNull (ex.Message, "#4");
3143 Assert.AreEqual ("remoteEP", ex.ParamName, "#5");
3149 [Test] // ReceiveFrom (Byte [], SocketFlags, ref EndPoint)
3150 public void ReceiveFrom2_Socket_Closed ()
3152 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3156 EndPoint remoteEP = new IPEndPoint (IPAddress.Loopback, 8001);
3158 s.ReceiveFrom ((Byte []) null, (SocketFlags) 666, ref remoteEP);
3160 } catch (ObjectDisposedException ex) {
3161 // Cannot access a disposed object
3162 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
3163 Assert.IsNull (ex.InnerException, "#3");
3164 Assert.IsNotNull (ex.Message, "#4");
3165 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
3169 [Test] // ReceiveFrom (Byte [], Int32, SocketFlags, ref EndPoint)
3170 public void ReceiveFrom3_Buffer_Null ()
3172 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3175 EndPoint remoteEP = new IPEndPoint (IPAddress.Loopback, 8001);
3177 s.ReceiveFrom ((Byte []) null, -1, (SocketFlags) 666,
3180 } catch (ArgumentNullException ex) {
3181 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
3182 Assert.IsNull (ex.InnerException, "#3");
3183 Assert.IsNotNull (ex.Message, "#4");
3184 Assert.AreEqual ("buffer", ex.ParamName, "#5");
3190 [Test] // ReceiveFrom (Byte [], Int32, SocketFlags, ref EndPoint)
3191 public void ReceiveFrom3_RemoteEP_Null ()
3193 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3196 byte [] buffer = new byte [5];
3197 EndPoint remoteEP = null;
3199 s.ReceiveFrom (buffer, -1, (SocketFlags) 666, ref remoteEP);
3201 } catch (ArgumentNullException ex) {
3202 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
3203 Assert.IsNull (ex.InnerException, "#3");
3204 Assert.IsNotNull (ex.Message, "#4");
3205 Assert.AreEqual ("remoteEP", ex.ParamName, "#5");
3211 [Test] // ReceiveFrom (Byte [], Int32, SocketFlags, ref EndPoint)
3212 public void ReceiveFrom3_Size_OutOfRange ()
3215 byte [] buffer = new byte [5];
3216 EndPoint remoteEP = new IPEndPoint (IPAddress.Loopback, 8001);
3219 s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3222 s.ReceiveFrom (buffer, -1, (SocketFlags) 666, ref remoteEP);
3223 Assert.Fail ("#A1");
3224 } catch (ArgumentOutOfRangeException ex) {
3225 // Specified argument was out of the range of valid values
3226 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#A2");
3227 Assert.IsNull (ex.InnerException, "#A3");
3228 Assert.IsNotNull (ex.Message, "#A4");
3229 Assert.AreEqual ("size", ex.ParamName, "#A5");
3234 // size > buffer length
3235 s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3238 s.ReceiveFrom (buffer, (buffer.Length + 1), (SocketFlags) 666,
3240 Assert.Fail ("#B1");
3241 } catch (ArgumentOutOfRangeException ex) {
3242 // Specified argument was out of the range of valid values
3243 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#B2");
3244 Assert.IsNull (ex.InnerException, "#B3");
3245 Assert.IsNotNull (ex.Message, "#B4");
3246 Assert.AreEqual ("size", ex.ParamName, "#B5");
3252 [Test] // ReceiveFrom (Byte [], Int32, SocketFlags, ref EndPoint)
3253 public void ReceiveFrom3_Socket_Closed ()
3255 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3259 EndPoint remoteEP = new IPEndPoint (IPAddress.Loopback, 8001);
3261 s.ReceiveFrom ((Byte []) null, -1, (SocketFlags) 666,
3264 } catch (ObjectDisposedException ex) {
3265 // Cannot access a disposed object
3266 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
3267 Assert.IsNull (ex.InnerException, "#3");
3268 Assert.IsNotNull (ex.Message, "#4");
3269 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
3273 [Test] // ReceiveFrom (Byte [], Int32, Int32, SocketFlags, EndPoint)
3274 public void ReceiveFrom4_Buffer_Null ()
3276 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3278 EndPoint remoteEP = new IPEndPoint (IPAddress.Loopback, 8001);
3281 s.ReceiveFrom ((Byte []) null, -1, -1, (SocketFlags) 666,
3284 } catch (ArgumentNullException ex) {
3285 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
3286 Assert.IsNull (ex.InnerException, "#3");
3287 Assert.IsNotNull (ex.Message, "#4");
3288 Assert.AreEqual ("buffer", ex.ParamName, "#5");
3292 [Test] // ReceiveFrom (Byte [], Int32, Int32, SocketFlags, EndPoint)
3293 public void ReceiveFrom4_Offset_OutOfRange ()
3296 byte [] buffer = new byte [5];
3297 EndPoint remoteEP = new IPEndPoint (IPAddress.Loopback, 8001);
3300 s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3303 s.ReceiveFrom (buffer, -1, 0, (SocketFlags) 666,
3305 Assert.Fail ("#A1");
3306 } catch (ArgumentOutOfRangeException ex) {
3307 // Specified argument was out of the range of valid values
3308 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#A2");
3309 Assert.IsNull (ex.InnerException, "#A3");
3310 Assert.IsNotNull (ex.Message, "#A4");
3311 Assert.AreEqual ("offset", ex.ParamName, "#A5");
3316 // offset > buffer length
3317 s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3320 s.ReceiveFrom (buffer, (buffer.Length + 1), 0, (SocketFlags) 666,
3322 Assert.Fail ("#B1");
3323 } catch (ArgumentOutOfRangeException ex) {
3324 // Specified argument was out of the range of valid values
3325 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#B2");
3326 Assert.IsNull (ex.InnerException, "#B3");
3327 Assert.IsNotNull (ex.Message, "#B4");
3328 Assert.AreEqual ("offset", ex.ParamName, "#B5");
3334 [Test] // ReceiveFrom (Byte [], Int32, Int32, SocketFlags, ref IPEndPoint)
3335 public void ReceiveFrom4_RemoteEP_Null ()
3337 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3339 byte [] buffer = new byte [5];
3340 EndPoint remoteEP = null;
3343 s.ReceiveFrom (buffer, -1, -1, (SocketFlags) 666, ref remoteEP);
3345 } catch (ArgumentNullException ex) {
3346 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
3347 Assert.IsNull (ex.InnerException, "#3");
3348 Assert.IsNotNull (ex.Message, "#4");
3349 Assert.AreEqual ("remoteEP", ex.ParamName, "#5");
3355 [Test] // ReceiveFrom (Byte [], Int32, Int32, SocketFlags, EndPoint)
3356 public void ReceiveFrom4_Size_OutOfRange ()
3359 byte [] buffer = new byte [5];
3360 EndPoint remoteEP = new IPEndPoint (IPAddress.Loopback, 8001);
3363 s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3366 s.ReceiveFrom (buffer, 0, -1, (SocketFlags) 666,
3368 Assert.Fail ("#A1");
3369 } catch (ArgumentOutOfRangeException ex) {
3370 // Specified argument was out of the range of valid values
3371 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#A2");
3372 Assert.IsNull (ex.InnerException, "#A3");
3373 Assert.IsNotNull (ex.Message, "#A4");
3374 Assert.AreEqual ("size", ex.ParamName, "#A5");
3379 // size > buffer length
3380 s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3383 s.ReceiveFrom (buffer, 0, (buffer.Length + 1), (SocketFlags) 666,
3385 Assert.Fail ("#B1");
3386 } catch (ArgumentOutOfRangeException ex) {
3387 // Specified argument was out of the range of valid values
3388 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#B2");
3389 Assert.IsNull (ex.InnerException, "#B3");
3390 Assert.IsNotNull (ex.Message, "#B4");
3391 Assert.AreEqual ("size", ex.ParamName, "#B5");
3396 // offset + size > buffer length
3397 s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3400 s.ReceiveFrom (buffer, 2, 4, (SocketFlags) 666, ref remoteEP);
3401 Assert.Fail ("#C1");
3402 } catch (ArgumentOutOfRangeException ex) {
3403 // Specified argument was out of the range of valid values
3404 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#C2");
3405 Assert.IsNull (ex.InnerException, "#C3");
3406 Assert.IsNotNull (ex.Message, "#C4");
3407 Assert.AreEqual ("size", ex.ParamName, "#C5");
3413 [Test] // ReceiveFrom (Byte [], Int32, Int32, SocketFlags, ref EndPoint)
3414 public void ReceiveFrom4_Socket_Closed ()
3416 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3420 byte [] buffer = new byte [5];
3421 EndPoint remoteEP = new IPEndPoint (IPAddress.Loopback, 8001);
3423 s.ReceiveFrom (buffer, -1, -1, (SocketFlags) 666,
3426 } catch (ObjectDisposedException ex) {
3427 // Cannot access a disposed object
3428 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
3429 Assert.IsNull (ex.InnerException, "#3");
3430 Assert.IsNotNull (ex.Message, "#4");
3431 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
3436 public void ReceiveRemoteClosed ()
3438 Socket sock = new Socket (AddressFamily.InterNetwork,
3441 sock.Bind (new IPEndPoint (IPAddress.Loopback, 1257));
3445 Thread client_thread = new Thread (new ThreadStart (RRCClientThread));
3446 client_thread.Start ();
3448 Socket client = sock.Accept ();
3449 NetworkStream stream = new NetworkStream (client);
3450 stream.WriteByte (0x00);
3451 stream.WriteByte (0x00);
3455 RRCReady.WaitOne (1000, false);
3456 Assert.IsTrue (RRCLastRead);
3460 // Test case for bug #471580
3462 public void UdpDoubleBind ()
3464 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
3465 s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, 1);
3467 s.Bind (new IPEndPoint (IPAddress.Any, 12345));
3469 Socket ss = new Socket (AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
3470 ss.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, 1);
3472 ss.Bind (new IPEndPoint (IPAddress.Any, 12345));
3474 // If we make it this far, we succeeded.
3482 [Category ("NotOnMac")]
3483 public void ConnectedProperty ()
3485 TcpListener listener = new TcpListener (IPAddress.Loopback, 23456);
3488 Socket client = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
3489 client.Connect (IPAddress.Loopback, 23456);
3490 Socket server = listener.AcceptSocket ();
3493 server.EndSend(server.BeginSend (new byte[10], 0, 10, SocketFlags.None, null, null));
3496 server.EndReceive (server.BeginReceive (new byte[10], 0, 10, SocketFlags.None, null, null));
3499 Assert.IsTrue (!client.Connected);
3500 Assert.IsTrue (!server.Connected);
3509 [Test] // GetSocketOption (SocketOptionLevel, SocketOptionName)
3510 public void GetSocketOption1_Socket_Closed ()
3512 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
3515 s.GetSocketOption (0, 0);
3517 } catch (ObjectDisposedException ex) {
3518 // Cannot access a disposed object
3519 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
3520 Assert.IsNull (ex.InnerException, "#3");
3521 Assert.IsNotNull (ex.Message, "#4");
3522 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
3526 [Test] // GetSocketOption (SocketOptionLevel, SocketOptionName, Byte [])
3527 public void GetSocketOption2_OptionValue_Null ()
3529 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
3531 s.GetSocketOption (SocketOptionLevel.Socket, SocketOptionName.Linger,
3534 } catch (SocketException ex) {
3535 // The system detected an invalid pointer address in attempting
3536 // to use a pointer argument in a call
3537 Assert.AreEqual (typeof (SocketException), ex.GetType (), "#2");
3538 Assert.AreEqual (10014, ex.ErrorCode, "#3");
3539 Assert.IsNull (ex.InnerException, "#4");
3540 Assert.IsNotNull (ex.Message, "#5");
3541 Assert.AreEqual (10014, ex.NativeErrorCode, "#6");
3543 Assert.AreEqual (SocketError.Fault, ex.SocketErrorCode, "#7");
3548 [Test] // GetSocketOption (SocketOptionLevel, SocketOptionName, Byte [])
3549 public void GetSocketOption2_Socket_Closed ()
3551 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
3554 s.GetSocketOption (0, 0, (byte []) null);
3556 } catch (ObjectDisposedException ex) {
3557 // Cannot access a disposed object
3558 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
3559 Assert.IsNull (ex.InnerException, "#3");
3560 Assert.IsNotNull (ex.Message, "#4");
3561 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
3565 [Test] // GetSocketOption (SocketOptionLevel, SocketOptionName, Int32)
3566 public void GetSocketOption3_Socket_Closed ()
3568 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
3571 s.GetSocketOption (0, 0, 0);
3573 } catch (ObjectDisposedException ex) {
3574 // Cannot access a disposed object
3575 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
3576 Assert.IsNull (ex.InnerException, "#3");
3577 Assert.IsNotNull (ex.Message, "#4");
3578 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
3582 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Byte [])
3583 public void SetSocketOption1_DontLinger ()
3585 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
3586 s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.DontLinger,
3587 new byte [] { 0x00 });
3588 s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.DontLinger,
3589 new byte [] { 0x01 });
3593 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Byte [])
3594 public void SetSocketOption1_DontLinger_Null ()
3596 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
3598 s.SetSocketOption (SocketOptionLevel.Socket,
3599 SocketOptionName.DontLinger, (byte []) null);
3601 } catch (SocketException ex) {
3602 // The system detected an invalid pointer address in attempting
3603 // to use a pointer argument in a call
3604 Assert.AreEqual (typeof (SocketException), ex.GetType (), "#2");
3605 Assert.AreEqual (10014, ex.ErrorCode, "#3");
3606 Assert.IsNull (ex.InnerException, "#4");
3607 Assert.IsNotNull (ex.Message, "#5");
3608 Assert.AreEqual (10014, ex.NativeErrorCode, "#6");
3610 Assert.AreEqual (SocketError.Fault, ex.SocketErrorCode, "#7");
3616 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Byte [])
3617 public void SetSocketOption1_Linger_Null ()
3619 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
3621 s.SetSocketOption (SocketOptionLevel.Socket,
3622 SocketOptionName.DontLinger, (byte []) null);
3624 } catch (SocketException ex) {
3625 // The system detected an invalid pointer address in attempting
3626 // to use a pointer argument in a call
3627 Assert.AreEqual (typeof (SocketException), ex.GetType (), "#2");
3628 Assert.AreEqual (10014, ex.ErrorCode, "#3");
3629 Assert.IsNull (ex.InnerException, "#4");
3630 Assert.IsNotNull (ex.Message, "#5");
3631 Assert.AreEqual (10014, ex.NativeErrorCode, "#6");
3633 Assert.AreEqual (SocketError.Fault, ex.SocketErrorCode, "#7");
3639 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Byte [])
3640 public void SetSocketOption1_Socket_Close ()
3642 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
3645 s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.DontLinger,
3646 new byte [] { 0x00 });
3648 } catch (ObjectDisposedException ex) {
3649 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
3650 Assert.IsNull (ex.InnerException, "#3");
3651 Assert.IsNotNull (ex.Message, "#4");
3652 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
3656 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Int32)
3657 public void SetSocketOption2_DontLinger ()
3659 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
3660 s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.DontLinger, 0);
3661 s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.DontLinger, 5);
3665 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Int32)
3666 [Category ("NotWorking")]
3667 public void SetSocketOption2_Linger ()
3669 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
3670 s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.Linger, 0);
3671 s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.Linger, 5);
3675 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Int32)
3676 public void SetSocketOption2_Socket_Closed ()
3678 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
3681 s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.DontLinger, 0);
3683 } catch (ObjectDisposedException ex) {
3684 // Cannot access a disposed object
3685 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
3686 Assert.IsNull (ex.InnerException, "#3");
3687 Assert.IsNotNull (ex.Message, "#4");
3688 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
3692 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
3693 public void SetSocketOption3_AddMembershipIPv4_IPv6MulticastOption ()
3695 IPAddress mcast_addr = IPAddress.Parse ("239.255.255.250");
3697 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp)) {
3698 s.Bind (new IPEndPoint (IPAddress.Any, 1901));
3700 s.SetSocketOption (SocketOptionLevel.IP, SocketOptionName.AddMembership,
3701 new IPv6MulticastOption (mcast_addr));
3703 } catch (ArgumentException ex) {
3704 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
3705 Assert.IsNull (ex.InnerException, "#3");
3706 Assert.IsNotNull (ex.Message, "#4");
3708 // The specified value is not a valid 'MulticastOption'
3709 Assert.IsTrue (ex.Message.IndexOf ("'MulticastOption'") != -1, "#5:" + ex.Message);
3710 Assert.AreEqual ("optionValue", ex.ParamName, "#6");
3712 Assert.AreEqual ("optionValue", ex.Message, "#5");
3713 Assert.IsNull (ex.ParamName, "#6");
3719 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
3720 public void SetSocketOption3_AddMembershipIPv4_MulticastOption ()
3722 IPAddress mcast_addr = IPAddress.Parse ("239.255.255.250");
3724 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp)) {
3725 s.Bind (new IPEndPoint (IPAddress.Any, 1901));
3726 s.SetSocketOption (SocketOptionLevel.IP, SocketOptionName.AddMembership,
3727 new MulticastOption (mcast_addr));
3731 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
3732 [Category ("NotWorking")]
3733 public void SetSocketOption3_AddMembershipIPv4_Socket_NotBound ()
3735 IPAddress mcast_addr = IPAddress.Parse ("239.255.255.250");
3737 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
3739 s.SetSocketOption (SocketOptionLevel.IP, SocketOptionName.AddMembership,
3740 new MulticastOption (mcast_addr));
3742 } catch (SocketException ex) {
3743 // An invalid argument was supplied
3744 Assert.AreEqual (typeof (SocketException), ex.GetType (), "#2");
3745 Assert.AreEqual (10022, ex.ErrorCode, "#3");
3746 Assert.IsNull (ex.InnerException, "#4");
3747 Assert.IsNotNull (ex.Message, "#5");
3748 Assert.AreEqual (10022, ex.NativeErrorCode, "#6");
3750 Assert.AreEqual (SocketError.InvalidArgument, ex.SocketErrorCode, "#7");
3757 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
3758 public void SetSocketOption3_AddMembershipIPv6_IPv6MulticastOption ()
3761 if (!Socket.OSSupportsIPv6)
3763 if (!Socket.SupportsIPv6)
3765 Assert.Ignore ("IPv6 not enabled.");
3767 IPAddress mcast_addr = IPAddress.Parse ("ff02::1");
3769 using (Socket s = new Socket (AddressFamily.InterNetworkV6, SocketType.Dgram, ProtocolType.Udp)) {
3770 s.Bind (new IPEndPoint (IPAddress.IPv6Any, 1902));
3771 s.SetSocketOption (SocketOptionLevel.IPv6, SocketOptionName.AddMembership,
3772 new IPv6MulticastOption (mcast_addr));
3776 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
3777 public void SetSocketOption3_AddMembershipIPv6_MulticastOption ()
3780 if (!Socket.OSSupportsIPv6)
3782 if (!Socket.SupportsIPv6)
3784 Assert.Ignore ("IPv6 not enabled.");
3786 IPAddress mcast_addr = IPAddress.Parse ("ff02::1");
3788 using (Socket s = new Socket (AddressFamily.InterNetworkV6, SocketType.Dgram, ProtocolType.Udp)) {
3789 s.Bind (new IPEndPoint (IPAddress.IPv6Any, 1902));
3791 s.SetSocketOption (SocketOptionLevel.IPv6, SocketOptionName.AddMembership,
3792 new MulticastOption (mcast_addr));
3794 } catch (ArgumentException ex) {
3795 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
3796 Assert.IsNull (ex.InnerException, "#3");
3797 Assert.IsNotNull (ex.Message, "#4");
3799 // The specified value is not a valid 'IPv6MulticastOption'
3800 Assert.IsTrue (ex.Message.IndexOf ("'IPv6MulticastOption'") != -1, "#5:" + ex.Message);
3801 Assert.AreEqual ("optionValue", ex.ParamName, "#6");
3803 Assert.AreEqual ("optionValue", ex.Message, "#5");
3804 Assert.IsNull (ex.ParamName, "#6");
3810 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
3811 [Category ("NotWorking")]
3812 public void SetSocketOption3_AddMembershipIPv6_Socket_NotBound ()
3814 IPAddress mcast_addr = IPAddress.Parse ("ff02::1");
3816 Socket s = new Socket (AddressFamily.InterNetworkV6, SocketType.Dgram, ProtocolType.Udp);
3818 s.SetSocketOption (SocketOptionLevel.IPv6, SocketOptionName.AddMembership,
3819 new IPv6MulticastOption (mcast_addr));
3821 } catch (SocketException ex) {
3822 // An invalid argument was supplied
3823 Assert.AreEqual (typeof (SocketException), ex.GetType (), "#2");
3824 Assert.AreEqual (10022, ex.ErrorCode, "#3");
3825 Assert.IsNull (ex.InnerException, "#4");
3826 Assert.IsNotNull (ex.Message, "#5");
3827 Assert.AreEqual (10022, ex.NativeErrorCode, "#6");
3829 Assert.AreEqual (SocketError.InvalidArgument, ex.SocketErrorCode, "#7");
3836 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
3837 public void SetSocketOption3_DontLinger_Boolean ()
3839 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
3841 s.SetSocketOption (SocketOptionLevel.Socket,
3842 SocketOptionName.DontLinger, (object) false);
3844 } catch (ArgumentException ex) {
3845 // The specified value is not valid
3846 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
3847 Assert.IsNull (ex.InnerException, "#3");
3849 Assert.IsNotNull (ex.Message, "#4");
3850 Assert.AreEqual ("optionValue", ex.ParamName, "#5");
3852 Assert.AreEqual ("optionValue", ex.Message, "#4");
3853 Assert.IsNull (ex.ParamName, "#5");
3859 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
3860 public void SetSocketOption3_DontLinger_Int32 ()
3862 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
3864 s.SetSocketOption (SocketOptionLevel.Socket,
3865 SocketOptionName.DontLinger, (object) 0);
3867 } catch (ArgumentException ex) {
3868 // The specified value is not valid
3869 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
3870 Assert.IsNull (ex.InnerException, "#3");
3872 Assert.IsNotNull (ex.Message, "#4");
3873 Assert.AreEqual ("optionValue", ex.ParamName, "#5");
3875 Assert.AreEqual ("optionValue", ex.Message, "#4");
3876 Assert.IsNull (ex.ParamName, "#5");
3882 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
3883 public void SetSocketOption3_DontLinger_LingerOption ()
3885 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
3887 s.SetSocketOption (SocketOptionLevel.Socket,
3888 SocketOptionName.DontLinger, new LingerOption (true, 1000));
3890 } catch (ArgumentException ex) {
3891 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
3892 Assert.IsNull (ex.InnerException, "#3");
3894 // The specified value is not valid
3895 Assert.IsNotNull (ex.Message, "#4");
3896 Assert.AreEqual ("optionValue", ex.ParamName, "#5");
3898 Assert.AreEqual ("optionValue", ex.Message, "#4");
3899 Assert.IsNull (ex.ParamName, "#5");
3905 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
3906 public void SetSocketOption3_Linger_Boolean ()
3908 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
3910 s.SetSocketOption (SocketOptionLevel.Socket,
3911 SocketOptionName.Linger, (object) false);
3913 } catch (ArgumentException ex) {
3914 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
3915 Assert.IsNull (ex.InnerException, "#3");
3917 // The specified value is not valid
3918 Assert.IsNotNull (ex.Message, "#4");
3919 Assert.AreEqual ("optionValue", ex.ParamName, "#5");
3921 Assert.AreEqual ("optionValue", ex.Message, "#4");
3922 Assert.IsNull (ex.ParamName, "#5");
3928 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
3929 public void SetSocketOption3_Linger_Int32 ()
3931 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
3933 s.SetSocketOption (SocketOptionLevel.Socket,
3934 SocketOptionName.Linger, (object) 0);
3936 } catch (ArgumentException ex) {
3937 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
3938 Assert.IsNull (ex.InnerException, "#3");
3940 // The specified value is not valid
3941 Assert.IsNotNull (ex.Message, "#4");
3942 Assert.AreEqual ("optionValue", ex.ParamName, "#5");
3944 Assert.AreEqual ("optionValue", ex.Message, "#4");
3945 Assert.IsNull (ex.ParamName, "#5");
3951 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
3952 public void SetSocketOption3_Linger_LingerOption ()
3954 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
3955 s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.Linger,
3956 new LingerOption (false, 0));
3957 s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.Linger,
3958 new LingerOption (true, 0));
3959 s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.Linger,
3960 new LingerOption (false, 1000));
3961 s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.Linger,
3962 new LingerOption (true, 1000));
3966 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
3967 public void SetSocketOption3_DropMembershipIPv4_IPv6MulticastOption ()
3969 IPAddress mcast_addr = IPAddress.Parse ("239.255.255.250");
3971 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp)) {
3972 s.Bind (new IPEndPoint (IPAddress.Any, 1901));
3973 s.SetSocketOption (SocketOptionLevel.IP, SocketOptionName.AddMembership,
3974 new MulticastOption (mcast_addr));
3976 s.SetSocketOption (SocketOptionLevel.IP, SocketOptionName.DropMembership,
3977 new IPv6MulticastOption (mcast_addr));
3979 } catch (ArgumentException ex) {
3980 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
3981 Assert.IsNull (ex.InnerException, "#3");
3982 Assert.IsNotNull (ex.Message, "#4");
3984 // The specified value is not a valid 'MulticastOption'
3985 Assert.IsTrue (ex.Message.IndexOf ("'MulticastOption'") != -1, "#5:" + ex.Message);
3986 Assert.AreEqual ("optionValue", ex.ParamName, "#6");
3988 Assert.AreEqual ("optionValue", ex.Message, "#5");
3989 Assert.IsNull (ex.ParamName, "#6");
3995 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
3996 public void SetSocketOption3_DropMembershipIPv4_MulticastOption ()
3998 IPAddress mcast_addr = IPAddress.Parse ("239.255.255.250");
4000 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp)) {
4001 MulticastOption option = new MulticastOption (mcast_addr);
4003 s.Bind (new IPEndPoint (IPAddress.Any, 1901));
4004 s.SetSocketOption (SocketOptionLevel.IP, SocketOptionName.AddMembership,
4006 s.SetSocketOption (SocketOptionLevel.IP, SocketOptionName.DropMembership,
4011 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
4012 [Category ("NotWorking")]
4013 public void SetSocketOption3_DropMembershipIPv4_Socket_NotBound ()
4015 IPAddress mcast_addr = IPAddress.Parse ("239.255.255.250");
4017 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
4019 s.SetSocketOption (SocketOptionLevel.IP, SocketOptionName.DropMembership,
4020 new MulticastOption (mcast_addr));
4022 } catch (SocketException ex) {
4023 // An invalid argument was supplied
4024 Assert.AreEqual (typeof (SocketException), ex.GetType (), "#2");
4025 Assert.AreEqual (10022, ex.ErrorCode, "#3");
4026 Assert.IsNull (ex.InnerException, "#4");
4027 Assert.IsNotNull (ex.Message, "#5");
4028 Assert.AreEqual (10022, ex.NativeErrorCode, "#6");
4030 Assert.AreEqual (SocketError.InvalidArgument, ex.SocketErrorCode, "#7");
4037 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
4038 public void SetSocketOption3_DropMembershipIPv6_IPv6MulticastOption ()
4041 if (!Socket.OSSupportsIPv6)
4043 if (!Socket.SupportsIPv6)
4045 Assert.Ignore ("IPv6 not enabled.");
4047 using (Socket s = new Socket (AddressFamily.InterNetworkV6, SocketType.Dgram, ProtocolType.Udp)) {
4048 IPv6MulticastOption option = new IPv6MulticastOption (
4049 IPAddress.Parse ("ff02::1"));
4051 s.Bind (new IPEndPoint (IPAddress.IPv6Any, 1902));
4052 s.SetSocketOption (SocketOptionLevel.IPv6, SocketOptionName.AddMembership,
4054 s.SetSocketOption (SocketOptionLevel.IPv6, SocketOptionName.DropMembership,
4059 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
4060 public void SetSocketOption3_DropMembershipIPv6_MulticastOption ()
4063 if (!Socket.OSSupportsIPv6)
4065 if (!Socket.SupportsIPv6)
4067 Assert.Ignore ("IPv6 not enabled.");
4069 IPAddress mcast_addr = IPAddress.Parse ("ff02::1");
4071 using (Socket s = new Socket (AddressFamily.InterNetworkV6, SocketType.Dgram, ProtocolType.Udp)) {
4072 s.Bind (new IPEndPoint (IPAddress.IPv6Any, 1902));
4073 s.SetSocketOption (SocketOptionLevel.IPv6, SocketOptionName.AddMembership,
4074 new IPv6MulticastOption (mcast_addr));
4076 s.SetSocketOption (SocketOptionLevel.IPv6, SocketOptionName.DropMembership,
4077 new MulticastOption (mcast_addr));
4079 } catch (ArgumentException ex) {
4080 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
4081 Assert.IsNull (ex.InnerException, "#3");
4082 Assert.IsNotNull (ex.Message, "#4");
4084 // The specified value is not a valid 'IPv6MulticastOption'
4085 Assert.IsTrue (ex.Message.IndexOf ("'IPv6MulticastOption'") != -1, "#5:" + ex.Message);
4086 Assert.AreEqual ("optionValue", ex.ParamName, "#6");
4088 Assert.AreEqual ("optionValue", ex.Message, "#5");
4089 Assert.IsNull (ex.ParamName, "#6");
4095 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
4096 [Category ("NotWorking")]
4097 public void SetSocketOption3_DropMembershipIPv6_Socket_NotBound ()
4099 IPAddress mcast_addr = IPAddress.Parse ("ff02::1");
4101 Socket s = new Socket (AddressFamily.InterNetworkV6, SocketType.Dgram, ProtocolType.Udp);
4103 s.SetSocketOption (SocketOptionLevel.IPv6, SocketOptionName.DropMembership,
4104 new IPv6MulticastOption (mcast_addr));
4106 } catch (SocketException ex) {
4107 // An invalid argument was supplied
4108 Assert.AreEqual (typeof (SocketException), ex.GetType (), "#2");
4109 Assert.AreEqual (10022, ex.ErrorCode, "#3");
4110 Assert.IsNull (ex.InnerException, "#4");
4111 Assert.IsNotNull (ex.Message, "#5");
4112 Assert.AreEqual (10022, ex.NativeErrorCode, "#6");
4114 Assert.AreEqual (SocketError.InvalidArgument, ex.SocketErrorCode, "#7");
4121 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
4122 public void SetSocketOption3_OptionValue_Null ()
4124 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
4126 s.SetSocketOption (SocketOptionLevel.Socket,
4127 SocketOptionName.Linger, (object) null);
4129 } catch (ArgumentNullException ex) {
4130 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
4131 Assert.IsNull (ex.InnerException, "#3");
4132 Assert.IsNotNull (ex.Message, "#4");
4133 Assert.AreEqual ("optionValue", ex.ParamName, "#5");
4138 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
4139 public void SetSocketOption3_Socket_Closed ()
4141 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
4144 s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.Linger,
4145 new LingerOption (false, 0));
4147 } catch (ObjectDisposedException ex) {
4148 // Cannot access a disposed object
4149 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
4150 Assert.IsNull (ex.InnerException, "#3");
4151 Assert.IsNotNull (ex.Message, "#4");
4152 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
4157 public void SetSocketOption_MulticastInterfaceIndex_Any ()
4159 IPAddress ip = IPAddress.Parse ("239.255.255.250");
4161 using (Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp))
4163 s.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.MulticastInterface, IPAddress.HostToNetworkOrder(index));
4164 s.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership, new MulticastOption(ip, index));
4169 public void SetSocketOption_MulticastInterfaceIndex_Loopback ()
4171 IPAddress ip = IPAddress.Parse ("239.255.255.250");
4173 using (Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp))
4175 s.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.MulticastInterface, IPAddress.HostToNetworkOrder(index));
4176 s.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership, new MulticastOption(ip, index));
4181 public void SetSocketOption_MulticastInterfaceIndex_Invalid ()
4183 IPAddress ip = IPAddress.Parse ("239.255.255.250");
4185 using (Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp))
4189 s.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.MulticastInterface, IPAddress.HostToNetworkOrder(index));
4196 s.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership, new MulticastOption(ip, index));
4205 public void Shutdown_NoConnect ()
4207 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
4208 s.Bind (new IPEndPoint (IPAddress.Loopback, 0));
4211 s.Shutdown (SocketShutdown.Both);
4213 } catch (SocketException exc) {
4214 Assert.AreEqual (10057, exc.ErrorCode, "#2");
4221 [ExpectedException (typeof (NullReferenceException))]
4222 public void ReceiveAsync_Null ()
4224 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
4225 s.ReceiveAsync (null);
4230 [ExpectedException (typeof (NullReferenceException))]
4231 public void ReceiveAsync_Default ()
4233 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
4234 SocketAsyncEventArgs saea = new SocketAsyncEventArgs ();
4235 s.ReceiveAsync (saea);
4241 [ExpectedException (typeof (NullReferenceException))]
4242 public void ReceiveAsync_NullBuffer ()
4244 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
4245 SocketAsyncEventArgs saea = new SocketAsyncEventArgs ();
4246 saea.SetBuffer (null, 0, 0);
4247 s.ReceiveAsync (null);
4252 [ExpectedException (typeof (ObjectDisposedException))]
4253 public void ReceiveAsync_ClosedSocket ()
4255 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
4257 s.ReceiveAsync (null);
4261 [ExpectedException (typeof (NullReferenceException))]
4262 public void SendAsync_Null ()
4264 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
4270 [ExpectedException (typeof (NullReferenceException))]
4271 public void SendAsync_Default ()
4273 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
4274 SocketAsyncEventArgs saea = new SocketAsyncEventArgs ();
4281 [ExpectedException (typeof (NullReferenceException))]
4282 public void SendAsync_NullBuffer ()
4284 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
4285 SocketAsyncEventArgs saea = new SocketAsyncEventArgs ();
4286 saea.SetBuffer (null, 0, 0);
4292 [ExpectedException (typeof (ObjectDisposedException))]
4293 public void SendAsync_ClosedSocket ()
4295 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
4301 public void SendAsyncFile ()
4303 Socket serverSocket = StartSocketServer ();
4305 Socket clientSocket = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
4306 clientSocket.Connect (serverSocket.LocalEndPoint);
4307 clientSocket.NoDelay = true;
4309 // Initialize buffer used to create testing file
4310 var buffer = new byte [1024];
4311 for (int i = 0; i < 1024; ++i)
4312 buffer [i] = (byte) (i % 256);
4314 string temp = Path.GetTempFileName ();
4316 // Testing file creation
4317 using (StreamWriter sw = new StreamWriter (temp)) {
4321 var m = new ManualResetEvent (false);
4323 // Async Send File to server
4324 clientSocket.BeginSendFile(temp, (ar) => {
4325 Socket client = (Socket) ar.AsyncState;
4326 client.EndSendFile (ar);
4330 if (!m.WaitOne (1500))
4331 throw new TimeoutException ();
4334 if (File.Exists (temp))
4337 clientSocket.Close ();
4338 serverSocket.Close ();
4342 Socket StartSocketServer ()
4345 Socket listenSocket = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
4347 listenSocket.Bind (new IPEndPoint (IPAddress.Loopback, 8001));
4348 listenSocket.Listen (1);
4350 listenSocket.BeginAccept (new AsyncCallback (ReceiveCallback), listenSocket);
4352 return listenSocket;
4355 public static void ReceiveCallback (IAsyncResult AsyncCall)
4357 byte[] bytes = new byte [1024];
4359 Socket listener = (Socket)AsyncCall.AsyncState;
4360 Socket client = listener.EndAccept (AsyncCall);
4362 client.Receive (bytes, bytes.Length, 0);