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");
211 [ExpectedException (typeof (ArgumentException))]
213 public void SetSocketOptionBoolean ()
215 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 1);
216 Socket sock = new Socket (ep.Address.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
218 sock.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.KeepAlive, true);
225 public void TestSelect1 ()
227 Socket srv = CreateServer ();
228 ClientSocket clnt = new ClientSocket (srv.LocalEndPoint);
229 Thread th = new Thread (new ThreadStart (clnt.ConnectSleepClose));
235 ArrayList list = new ArrayList ();
236 ArrayList empty = new ArrayList ();
238 Socket.Select (list, empty, empty, 100);
239 Assert.AreEqual (0, empty.Count, "#01");
240 Assert.AreEqual (1, list.Count, "#02");
241 Socket.Select (empty, list, empty, 100);
242 Assert.AreEqual (0, empty.Count, "#03");
243 Assert.AreEqual (1, list.Count, "#04");
244 Socket.Select (list, empty, empty, -1);
245 Assert.AreEqual (0, empty.Count, "#05");
246 Assert.AreEqual (1, list.Count, "#06");
247 // Need to read the 10 bytes from the client to avoid a RST
248 byte [] bytes = new byte [10];
257 static Socket CreateServer ()
259 Socket sock = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
260 sock.Bind (new IPEndPoint (IPAddress.Loopback, 0));
269 public ClientSocket (EndPoint ep)
272 sock = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
275 public void ConnectSleepClose ()
284 byte [] b = new byte [10];
289 byte[] buf = new byte[100];
292 [ExpectedException (typeof (ObjectDisposedException))]
293 public void Disposed2 ()
295 Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
302 [ExpectedException (typeof (ObjectDisposedException))]
303 public void Disposed6 ()
305 Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
312 [ExpectedException (typeof (ObjectDisposedException))]
313 public void Disposed7 ()
315 Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
322 [ExpectedException (typeof (ObjectDisposedException))]
323 public void Disposed15 ()
325 Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
332 [ExpectedException (typeof (ObjectDisposedException))]
333 public void Disposed16 ()
335 Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
342 [ExpectedException (typeof (ObjectDisposedException))]
343 public void Disposed17 ()
345 Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
352 [ExpectedException (typeof (ObjectDisposedException))]
353 public void Disposed18 ()
355 Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
358 s.Send (buf, 0, 10, 0);
362 [ExpectedException (typeof (ObjectDisposedException))]
363 public void Disposed19 ()
365 Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
366 EndPoint ep = new IPEndPoint (IPAddress.Any, 31337);
369 s.SendTo (buf, 0, ep);
373 [ExpectedException (typeof (ObjectDisposedException))]
374 public void Disposed20 ()
376 Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
377 EndPoint ep = new IPEndPoint (IPAddress.Any, 31337);
380 s.SendTo (buf, 10, 0, ep);
384 [ExpectedException (typeof (ObjectDisposedException))]
385 public void Disposed21 ()
387 Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
388 EndPoint ep = new IPEndPoint (IPAddress.Any, 31337);
391 s.SendTo (buf, 0, 10, 0, ep);
395 [ExpectedException (typeof (ObjectDisposedException))]
396 public void Disposed22 ()
398 Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
399 EndPoint ep = new IPEndPoint (IPAddress.Any, 31337);
406 [ExpectedException (typeof (ObjectDisposedException))]
407 public void Disposed23 ()
409 Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
416 public void GetHashCodeTest ()
418 Socket server = new Socket (AddressFamily.InterNetwork,
419 SocketType.Stream, ProtocolType.Tcp);
420 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
425 Socket client = new Socket (AddressFamily.InterNetwork,
426 SocketType.Stream, ProtocolType.Tcp);
427 int hashcodeA = client.GetHashCode ();
429 int hashcodeB = client.GetHashCode ();
430 Assert.AreEqual (hashcodeA, hashcodeB, "#1");
432 int hashcodeC = client.GetHashCode ();
434 Assert.AreEqual (hashcodeB, hashcodeC, "#2");
436 Assert.IsFalse (hashcodeB == hashcodeC, "#2");
441 static ManualResetEvent SocketError_event = new ManualResetEvent (false);
443 private static void SocketError_callback (IAsyncResult ar)
445 Socket sock = (Socket)ar.AsyncState;
448 sock.EndConnect (ar);
451 SocketError_event.Set ();
455 public void SocketErrorTest ()
457 Socket sock = new Socket (AddressFamily.InterNetwork,
460 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
463 SocketError_event.Reset ();
465 sock.Blocking = false;
466 sock.BeginConnect (ep, new AsyncCallback(SocketError_callback),
469 if (SocketError_event.WaitOne (2000, false) == false) {
470 Assert.Fail ("SocketError wait timed out");
473 Assert.AreEqual (false, sock.Connected, "SocketError #1");
477 error = (int)sock.GetSocketOption (SocketOptionLevel.Socket, SocketOptionName.Error);
478 Assert.AreEqual (10061, error, "SocketError #2");
480 error = (int)sock.GetSocketOption (SocketOptionLevel.Socket, SocketOptionName.Error);
481 Assert.AreEqual (10061, error, "SocketError #3");
489 public void SocketInformationCtor ()
494 public void DontFragmentDefaultTcp ()
496 Socket sock = new Socket (AddressFamily.InterNetwork,
500 Assert.AreEqual (false, sock.DontFragment, "DontFragmentDefaultTcp");
506 [Category ("NotWorking")] // DontFragment doesn't work
507 public void DontFragmentChangeTcp ()
509 Socket sock = new Socket (AddressFamily.InterNetwork,
513 sock.DontFragment = true;
515 Assert.AreEqual (true, sock.DontFragment, "DontFragmentChangeTcp");
521 public void DontFragmentDefaultUdp ()
523 Socket sock = new Socket (AddressFamily.InterNetwork,
527 Assert.AreEqual (false, sock.DontFragment, "DontFragmentDefaultUdp");
533 [Category ("NotWorking")] // DontFragment doesn't work
534 public void DontFragmentChangeUdp ()
536 Socket sock = new Socket (AddressFamily.InterNetwork,
540 sock.DontFragment = true;
542 Assert.AreEqual (true, sock.DontFragment, "DontFragmentChangeUdp");
548 [ExpectedException (typeof(ObjectDisposedException))]
549 public void DontFragmentClosed ()
551 Socket sock = new Socket (AddressFamily.InterNetwork,
557 bool val = sock.DontFragment;
561 [Category ("NotWorking")] // Need to pick a non-IP AddressFamily that "works" on both mono and ms, this one only works on ms
562 public void DontFragment ()
564 Socket sock = new Socket (AddressFamily.NetBios,
565 SocketType.Seqpacket,
566 ProtocolType.Unspecified);
569 sock.DontFragment = true;
570 Assert.Fail ("DontFragment #1");
571 } catch (NotSupportedException) {
573 Assert.Fail ("DontFragment #2");
580 public void EnableBroadcastDefaultTcp ()
582 Socket sock = new Socket (AddressFamily.InterNetwork,
587 bool value = sock.EnableBroadcast;
588 Assert.Fail ("EnableBroadcastDefaultTcp #1");
589 } catch (SocketException ex) {
590 Assert.AreEqual (10042, ex.ErrorCode, "EnableBroadcastDefaultTcp #2");
592 Assert.Fail ("EnableBroadcastDefaultTcp #2");
599 public void EnableBroadcastDefaultUdp ()
601 Socket sock = new Socket (AddressFamily.InterNetwork,
605 Assert.AreEqual (false, sock.EnableBroadcast, "EnableBroadcastDefaultUdp");
611 public void EnableBroadcastChangeTcp ()
613 Socket sock = new Socket (AddressFamily.InterNetwork,
618 sock.EnableBroadcast = true;
619 Assert.Fail ("EnableBroadcastChangeTcp #1");
620 } catch (SocketException ex) {
621 Assert.AreEqual (10042, ex.ErrorCode, "EnableBroadcastChangeTcp #2");
623 Assert.Fail ("EnableBroadcastChangeTcp #2");
630 public void EnableBroadcastChangeUdp ()
632 Socket sock = new Socket (AddressFamily.InterNetwork,
636 sock.EnableBroadcast = true;
638 Assert.AreEqual (true, sock.EnableBroadcast, "EnableBroadcastChangeUdp");
644 [ExpectedException (typeof(ObjectDisposedException))]
645 public void EnableBroadcastClosed ()
647 Socket sock = new Socket (AddressFamily.InterNetwork,
653 bool val = sock.EnableBroadcast;
656 /* Can't test the default for ExclusiveAddressUse as
657 * it's different on different versions and service
661 [Category ("NotWorking")] // Not supported on Linux
662 public void ExclusiveAddressUseUnbound ()
664 Socket sock = new Socket (AddressFamily.InterNetwork,
668 sock.ExclusiveAddressUse = true;
670 Assert.AreEqual (true, sock.ExclusiveAddressUse, "ExclusiveAddressUseUnbound");
676 [ExpectedException (typeof(InvalidOperationException))]
677 [Category ("NotWorking")] // Not supported on Linux
678 public void ExclusiveAddressUseBound ()
680 Socket sock = new Socket (AddressFamily.InterNetwork,
684 sock.Bind (new IPEndPoint (IPAddress.Any, 1235));
685 sock.ExclusiveAddressUse = true;
690 [ExpectedException (typeof(ObjectDisposedException))]
691 public void ExclusiveAddressUseClosed ()
693 Socket sock = new Socket (AddressFamily.InterNetwork,
699 bool val = sock.ExclusiveAddressUse;
703 public void IsBoundTcp ()
705 Socket sock = new Socket (AddressFamily.InterNetwork,
708 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
711 Assert.AreEqual (false, sock.IsBound, "IsBoundTcp #1");
714 Assert.AreEqual (true, sock.IsBound, "IsBoundTcp #2");
718 Socket sock2 = new Socket (AddressFamily.InterNetwork,
722 Assert.AreEqual (false, sock2.IsBound, "IsBoundTcp #3");
725 Assert.AreEqual (true, sock2.IsBound, "IsBoundTcp #4");
728 Assert.AreEqual (true, sock2.IsBound, "IsBoundTcp #5");
731 Assert.AreEqual (true, sock.IsBound, "IsBoundTcp #6");
735 public void IsBoundUdp ()
737 Socket sock = new Socket (AddressFamily.InterNetwork,
740 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
743 Assert.AreEqual (false, sock.IsBound, "IsBoundUdp #1");
746 Assert.AreEqual (true, sock.IsBound, "IsBoundUdp #2");
749 Assert.AreEqual (true, sock.IsBound, "IsBoundUdp #3");
752 sock = new Socket (AddressFamily.InterNetwork,
756 Assert.AreEqual (false, sock.IsBound, "IsBoundUdp #4");
759 Assert.AreEqual (true, sock.IsBound, "IsBoundUdp #5");
762 Assert.AreEqual (true, sock.IsBound, "IsBoundUdp #6");
766 /* Should not throw an exception */
767 public void IsBoundClosed ()
769 Socket sock = new Socket (AddressFamily.InterNetwork,
775 bool val = sock.IsBound;
778 /* Nothing much to test for LingerState */
781 public void MulticastLoopbackDefaultTcp ()
783 Socket sock = new Socket (AddressFamily.InterNetwork,
788 bool value = sock.MulticastLoopback;
789 Assert.Fail ("MulticastLoopbackDefaultTcp #1");
790 } catch (SocketException ex) {
791 Assert.AreEqual (10042, ex.ErrorCode, "MulticastLoopbackDefaultTcp #2");
793 Assert.Fail ("MulticastLoopbackDefaultTcp #2");
800 public void MulticastLoopbackChangeTcp ()
802 Socket sock = new Socket (AddressFamily.InterNetwork,
807 sock.MulticastLoopback = false;
808 Assert.Fail ("MulticastLoopbackChangeTcp #1");
809 } catch (SocketException ex) {
810 Assert.AreEqual (10042, ex.ErrorCode, "MulticastLoopbackChangeTcp #2");
812 Assert.Fail ("MulticastLoopbackChangeTcp #2");
819 public void MulticastLoopbackDefaultUdp ()
821 Socket sock = new Socket (AddressFamily.InterNetwork,
825 Assert.AreEqual (true, sock.MulticastLoopback, "MulticastLoopbackDefaultUdp");
831 public void MulticastLoopbackChangeUdp ()
833 Socket sock = new Socket (AddressFamily.InterNetwork,
837 sock.MulticastLoopback = false;
839 Assert.AreEqual (false, sock.MulticastLoopback, "MulticastLoopbackChangeUdp");
845 [ExpectedException (typeof(ObjectDisposedException))]
846 public void MulticastLoopbackClosed ()
848 Socket sock = new Socket (AddressFamily.InterNetwork,
854 bool val = sock.MulticastLoopback;
857 /* OSSupportsIPv6 depends on the environment */
860 [Category("NotWorking")] // We have different defaults for perf reasons
861 public void ReceiveBufferSizeDefault ()
863 Socket sock = new Socket (AddressFamily.InterNetwork,
867 Assert.AreEqual (8192, sock.ReceiveBufferSize, "ReceiveBufferSizeDefault");
873 [Category("NotWorking")] // We have different defaults for perf reasons
874 public void ReceiveBufferSizeDefaultUdp ()
876 Socket sock = new Socket (AddressFamily.InterNetwork,
880 Assert.AreEqual (8192, sock.ReceiveBufferSize, "ReceiveBufferSizeDefaultUdp");
886 public void ReceiveBufferSizeChange ()
888 Socket sock = new Socket (AddressFamily.InterNetwork,
892 sock.ReceiveBufferSize = 16384;
894 Assert.AreEqual (16384, sock.ReceiveBufferSize, "ReceiveBufferSizeChange");
900 [Category("NotWorking")] // We cannot totally remove buffers (minimum is set to 256
901 public void BuffersCheck_None ()
903 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
904 int original = s.ReceiveBufferSize;
905 s.ReceiveBufferSize = 0;
906 Assert.AreEqual (0, s.ReceiveBufferSize, "ReceiveBufferSize " + original.ToString ());
908 original = s.SendBufferSize;
909 s.SendBufferSize = 0;
910 Assert.AreEqual (0, s.SendBufferSize, "SendBufferSize " + original.ToString ());
915 [ExpectedException (typeof(ObjectDisposedException))]
916 public void ReceiveBufferSizeClosed ()
918 Socket sock = new Socket (AddressFamily.InterNetwork,
924 int val = sock.ReceiveBufferSize;
928 [Category("NotWorking")] // We have different defaults for perf reasons
929 public void SendBufferSizeDefault ()
931 Socket sock = new Socket (AddressFamily.InterNetwork,
935 Assert.AreEqual (8192, sock.SendBufferSize, "SendBufferSizeDefault");
941 [Category("NotWorking")] // We have different defaults for perf reasons
942 public void SendBufferSizeDefaultUdp ()
944 Socket sock = new Socket (AddressFamily.InterNetwork,
948 Assert.AreEqual (8192, sock.SendBufferSize, "SendBufferSizeDefaultUdp");
954 public void SendBufferSizeChange ()
956 Socket sock = new Socket (AddressFamily.InterNetwork,
960 sock.SendBufferSize = 16384;
962 Assert.AreEqual (16384, sock.SendBufferSize, "SendBufferSizeChange");
968 [ExpectedException (typeof(ObjectDisposedException))]
969 public void SendBufferSizeClosed ()
971 Socket sock = new Socket (AddressFamily.InterNetwork,
977 int val = sock.SendBufferSize;
980 /* No test for TTL default as it's platform dependent */
982 public void TtlChange ()
984 Socket sock = new Socket (AddressFamily.InterNetwork,
990 Assert.AreEqual (255, sock.Ttl, "TtlChange");
996 [Category ("NotOnMac")] // Mac doesn't throw when overflowing the ttl
997 public void TtlChangeOverflow ()
999 Socket sock = new Socket (AddressFamily.InterNetwork,
1005 Assert.Fail ("TtlChangeOverflow #1");
1006 } catch (SocketException ex) {
1007 Assert.AreEqual (10022, ex.ErrorCode,
1008 "TtlChangeOverflow #2");
1010 Assert.Fail ("TtlChangeoverflow #3");
1016 /* Apparently you can set TTL=0 on the ms runtime!!
1019 Assert.Fail ("TtlChangeOverflow #4");
1020 } catch (SocketException ex) {
1021 Assert.AreEqual (10022, ex.ErrorCode,
1022 "TtlChangeOverflow #5");
1024 Assert.Fail ("TtlChangeOverflow #6");
1031 [ExpectedException (typeof(ObjectDisposedException))]
1032 public void TtlClosed ()
1034 Socket sock = new Socket (AddressFamily.InterNetwork,
1044 public void UseOnlyOverlappedIODefault ()
1046 Socket sock = new Socket (AddressFamily.InterNetwork,
1050 Assert.AreEqual (false, sock.UseOnlyOverlappedIO, "UseOnlyOverlappedIODefault");
1056 // We need this because the Linux kernel in certain configurations
1057 // will end up rounding up the values passed on to the kernel
1058 // for socket send/receive timeouts.
1060 int Approximate (int target, int value)
1064 if (value > target-10 && value < target+10)
1070 public void UseOnlyOverlappedIOChange ()
1072 Socket sock = new Socket (AddressFamily.InterNetwork,
1076 sock.UseOnlyOverlappedIO = true;
1078 Assert.AreEqual (true, sock.UseOnlyOverlappedIO, "UseOnlyOverlappedIOChange");
1084 /* Should not throw an exception */
1085 public void UseOnlyOverlappedIOClosed ()
1087 Socket sock = new Socket (AddressFamily.InterNetwork,
1093 bool val = sock.UseOnlyOverlappedIO;
1097 public void SendTimeoutDefault ()
1099 Socket sock = new Socket (AddressFamily.InterNetwork,
1103 Assert.AreEqual (0, sock.SendTimeout, "SendTimeoutDefault");
1109 public void SendTimeoutChange ()
1111 Socket sock = new Socket (AddressFamily.InterNetwork,
1115 /* Should be rounded up to 500, according to
1116 * the MSDN docs, but the MS runtime doesn't
1118 sock.SendTimeout = 50;
1119 Assert.AreEqual (50, Approximate (50, sock.SendTimeout), "SendTimeoutChange #1");
1121 sock.SendTimeout = 2000;
1122 Assert.AreEqual (2000, Approximate (2000, sock.SendTimeout), "SendTimeoutChange #2");
1124 sock.SendTimeout = 0;
1125 Assert.AreEqual (0, Approximate (0, sock.SendTimeout), "SendTimeoutChange #3");
1127 /* Should be the same as setting 0 */
1128 sock.SendTimeout = -1;
1129 Assert.AreEqual (0, sock.SendTimeout, "SendTimeoutChange #4");
1131 sock.SendTimeout = 65536;
1132 Assert.AreEqual (65536, Approximate (65536, sock.SendTimeout), "SendTimeoutChange #5");
1135 sock.SendTimeout = -2;
1136 Assert.Fail ("SendTimeoutChange #8");
1137 } catch (ArgumentOutOfRangeException) {
1139 Assert.Fail ("SendTimeoutChange #9");
1146 [ExpectedException (typeof(ObjectDisposedException))]
1147 public void SendTimeoutClosed ()
1149 Socket sock = new Socket (AddressFamily.InterNetwork,
1155 int val = sock.SendTimeout;
1159 public void ReceiveTimeoutDefault ()
1161 Socket sock = new Socket (AddressFamily.InterNetwork,
1165 Assert.AreEqual (0, sock.ReceiveTimeout, "ReceiveTimeoutDefault");
1171 public void ReceiveTimeoutChange ()
1173 Socket sock = new Socket (AddressFamily.InterNetwork,
1177 sock.ReceiveTimeout = 50;
1178 Assert.AreEqual (50, Approximate (50, sock.ReceiveTimeout), "ReceiveTimeoutChange #1");
1180 sock.ReceiveTimeout = 2000;
1181 Assert.AreEqual (2000, Approximate (2000, sock.ReceiveTimeout), "ReceiveTimeoutChange #2");
1183 sock.ReceiveTimeout = 0;
1184 Assert.AreEqual (0, sock.ReceiveTimeout, "ReceiveTimeoutChange #3");
1186 /* Should be the same as setting 0 */
1187 sock.ReceiveTimeout = -1;
1188 Assert.AreEqual (0, sock.ReceiveTimeout, "ReceiveTimeoutChange #4");
1190 sock.ReceiveTimeout = 65536;
1191 Assert.AreEqual (65536, Approximate (65536, sock.ReceiveTimeout), "ReceiveTimeoutChange #5");
1194 sock.ReceiveTimeout = -2;
1195 Assert.Fail ("ReceiveTimeoutChange #8");
1196 } catch (ArgumentOutOfRangeException) {
1198 Assert.Fail ("ReceiveTimeoutChange #9");
1205 [ExpectedException (typeof(ObjectDisposedException))]
1206 public void ReceiveTimeoutClosed ()
1208 Socket sock = new Socket (AddressFamily.InterNetwork,
1214 int val = sock.ReceiveTimeout;
1218 public void NoDelayDefaultTcp ()
1220 Socket sock = new Socket (AddressFamily.InterNetwork,
1224 Assert.AreEqual (false, sock.NoDelay, "NoDelayDefaultTcp");
1230 public void NoDelayChangeTcp ()
1232 Socket sock = new Socket (AddressFamily.InterNetwork,
1236 sock.NoDelay = true;
1238 Assert.AreEqual (true, sock.NoDelay, "NoDelayChangeTcp");
1244 public void NoDelayDefaultUdp ()
1246 Socket sock = new Socket (AddressFamily.InterNetwork,
1251 bool val = sock.NoDelay;
1252 Assert.Fail ("NoDelayDefaultUdp #1");
1253 } catch (SocketException ex) {
1254 Assert.AreEqual (10042, ex.ErrorCode,
1255 "NoDelayDefaultUdp #2");
1257 Assert.Fail ("NoDelayDefaultUdp #3");
1264 public void NoDelayChangeUdp ()
1266 Socket sock = new Socket (AddressFamily.InterNetwork,
1271 sock.NoDelay = true;
1272 Assert.Fail ("NoDelayChangeUdp #1");
1273 } catch (SocketException ex) {
1274 Assert.AreEqual (10042, ex.ErrorCode,
1275 "NoDelayChangeUdp #2");
1277 Assert.Fail ("NoDelayChangeUdp #3");
1284 [ExpectedException (typeof(ObjectDisposedException))]
1285 public void NoDelayClosed ()
1287 Socket sock = new Socket (AddressFamily.InterNetwork,
1293 bool val = sock.NoDelay;
1296 static bool BAAccepted = false;
1297 static Socket BASocket = null;
1298 static ManualResetEvent BACalledBack = new ManualResetEvent (false);
1300 private static void BACallback (IAsyncResult asyncResult)
1302 Socket sock = (Socket)asyncResult.AsyncState;
1304 BASocket = sock.EndAccept (asyncResult);
1307 BACalledBack.Set ();
1311 [ExpectedException (typeof(InvalidOperationException))]
1312 public void BeginAcceptNotBound ()
1314 Socket sock = new Socket (AddressFamily.InterNetwork,
1318 sock.BeginAccept (BACallback, sock);
1324 [ExpectedException (typeof(InvalidOperationException))]
1325 public void BeginAcceptNotListening ()
1327 Socket sock = new Socket (AddressFamily.InterNetwork,
1331 sock.Bind (new IPEndPoint (IPAddress.Any, 1236));
1333 sock.BeginAccept (BACallback, sock);
1339 public void BeginAccept ()
1341 Socket sock = new Socket (AddressFamily.InterNetwork,
1344 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
1350 BACalledBack.Reset ();
1352 sock.BeginAccept (BACallback, sock);
1354 Socket conn = new Socket (AddressFamily.InterNetwork,
1360 if (BACalledBack.WaitOne (2000, false) == false) {
1361 Assert.Fail ("BeginAccept wait timed out");
1364 Assert.AreEqual (true, BAAccepted, "BeginAccept #1");
1365 Assert.AreEqual (true, BASocket.Connected, "BeginAccept #2");
1366 Assert.AreEqual (false, sock.Connected, "BeginAccept #3");
1367 Assert.AreEqual (true, conn.Connected, "BeginAccept #4");
1375 [ExpectedException (typeof(ObjectDisposedException))]
1376 public void BeginAcceptClosed ()
1378 Socket sock = new Socket (AddressFamily.InterNetwork,
1384 sock.BeginAccept (BACallback, sock);
1387 static bool BADAccepted = false;
1388 static Socket BADSocket = null;
1389 static byte[] BADBytes;
1390 static int BADByteCount;
1391 static ManualResetEvent BADCalledBack = new ManualResetEvent (false);
1393 private static void BADCallback (IAsyncResult asyncResult)
1395 Socket sock = (Socket)asyncResult.AsyncState;
1397 BADSocket = sock.EndAccept (out BADBytes,
1402 BADCalledBack.Set ();
1406 public void BeginAcceptData ()
1408 Socket sock = new Socket (AddressFamily.InterNetwork,
1411 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
1417 BADCalledBack.Reset ();
1419 sock.BeginAccept (256, BADCallback, sock);
1421 Socket conn = new Socket (AddressFamily.InterNetwork,
1424 byte[] send_bytes = new byte[] {10, 11, 12, 13};
1427 conn.Send (send_bytes);
1429 if (BADCalledBack.WaitOne (2000, false) == false) {
1430 Assert.Fail ("BeginAcceptData wait timed out");
1433 Assert.AreEqual (true, BADAccepted, "BeginAcceptData #1");
1434 Assert.AreEqual (true, BADSocket.Connected, "BeginAcceptData #2");
1435 Assert.AreEqual (false, sock.Connected, "BeginAcceptData #3");
1436 Assert.AreEqual (true, conn.Connected, "BeginAcceptData #4");
1437 Assert.AreEqual (send_bytes.Length, BADByteCount, "BeginAcceptData #5");
1439 /* The MS runtime gives the returned data in a
1440 * much bigger array. TODO: investigate
1441 * whether it the size correlates to the first
1442 * parameter in BeginAccept()
1444 Assert.IsFalse (BADBytes.Length == send_bytes.Length,
1445 "BeginAcceptData #6");
1447 for(int i = 0; i < send_bytes.Length; i++) {
1448 Assert.AreEqual (send_bytes[i], BADBytes[i], "BeginAcceptData #" + (i+7).ToString ());
1457 [ExpectedException (typeof(ObjectDisposedException))]
1458 public void BeginAcceptDataClosed ()
1460 Socket sock = new Socket (AddressFamily.InterNetwork,
1466 sock.BeginAccept (256, BADCallback, sock);
1470 public void BeginAcceptSocketUdp ()
1472 Socket sock = new Socket (AddressFamily.InterNetwork,
1475 Socket acc = new Socket (AddressFamily.InterNetwork,
1479 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
1486 sock.BeginAccept (acc, 256, BADCallback, sock);
1487 Assert.Fail ("BeginAcceptSocketUdp #1");
1488 } catch (SocketException ex) {
1489 Assert.AreEqual (10022, ex.ErrorCode, "BeginAcceptSocketUdp #2");
1491 Assert.Fail ("BeginAcceptSocketUdp #3");
1499 public void BeginAcceptSocketBound ()
1501 Socket sock = new Socket (AddressFamily.InterNetwork,
1504 Socket acc = new Socket (AddressFamily.InterNetwork,
1508 IPEndPoint ep1 = new IPEndPoint (IPAddress.Loopback,
1511 IPEndPoint ep2 = new IPEndPoint (IPAddress.Loopback,
1520 sock.BeginAccept (acc, 256, BADCallback, sock);
1521 Assert.Fail ("BeginAcceptSocketBound #1");
1522 } catch (InvalidOperationException) {
1524 Assert.Fail ("BeginAcceptSocketBound #2");
1532 public void BeginAcceptSocket ()
1534 Socket sock = new Socket (AddressFamily.InterNetwork,
1537 Socket acc = new Socket (AddressFamily.InterNetwork,
1541 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
1547 BADCalledBack.Reset ();
1549 sock.BeginAccept (acc, 256, BADCallback, sock);
1551 Socket conn = new Socket (AddressFamily.InterNetwork,
1554 byte[] send_bytes = new byte[] {10, 11, 12, 13};
1557 conn.Send (send_bytes);
1559 if (BADCalledBack.WaitOne (2000, false) == false) {
1560 Assert.Fail ("BeginAcceptSocket wait timed out");
1563 Assert.AreEqual (true, BADAccepted, "BeginAcceptSocket #1");
1564 Assert.AreEqual (true, BADSocket.Connected, "BeginAcceptSocket #2");
1565 Assert.AreEqual (false, sock.Connected, "BeginAcceptSocket #3");
1566 Assert.AreEqual (true, conn.Connected, "BeginAcceptSocket #4");
1567 Assert.AreEqual (send_bytes.Length, BADByteCount, "BeginAcceptSocket #5");
1568 Assert.AreEqual (AddressFamily.InterNetwork, acc.AddressFamily, "BeginAcceptSocket #6");
1569 Assert.AreEqual (SocketType.Stream, acc.SocketType, "BeginAcceptSocket #7");
1570 Assert.AreEqual (ProtocolType.Tcp, acc.ProtocolType, "BeginAcceptSocket #8");
1571 Assert.AreEqual (conn.LocalEndPoint, acc.RemoteEndPoint, "BeginAcceptSocket #9");
1573 /* The MS runtime gives the returned data in a
1574 * much bigger array. TODO: investigate
1575 * whether it the size correlates to the first
1576 * parameter in BeginAccept()
1578 Assert.IsFalse (BADBytes.Length == send_bytes.Length,
1579 "BeginAcceptSocket #10");
1581 for(int i = 0; i < send_bytes.Length; i++) {
1582 Assert.AreEqual (send_bytes[i], BADBytes[i], "BeginAcceptSocket #" + (i+11).ToString ());
1592 public void BeginAcceptSocketClosed ()
1594 Socket sock = new Socket (AddressFamily.InterNetwork,
1597 Socket acc = new Socket (AddressFamily.InterNetwork,
1604 sock.BeginAccept (acc, 256, BADCallback, null);
1605 Assert.Fail ("BeginAcceptSocketClosed #1");
1606 } catch (ObjectDisposedException) {
1608 Assert.Fail ("BeginAcceptSocketClosed #2");
1615 public void BeginAcceptSocketAccClosed ()
1617 Socket sock = new Socket (AddressFamily.InterNetwork,
1620 Socket acc = new Socket (AddressFamily.InterNetwork,
1623 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
1631 BADCalledBack.Reset ();
1634 sock.BeginAccept (acc, 256, BADCallback, null);
1635 Assert.Fail ("BeginAcceptSocketAccClosed #1");
1636 } catch (ObjectDisposedException) {
1638 Assert.Fail ("BeginAcceptSocketAccClosed #2");
1644 static bool BCConnected = false;
1645 static ManualResetEvent BCCalledBack = new ManualResetEvent (false);
1647 private static void BCCallback (IAsyncResult asyncResult)
1649 Socket sock = (Socket)asyncResult.AsyncState;
1651 sock.EndConnect (asyncResult);
1654 BCCalledBack.Set ();
1658 public void BeginConnectAddressPort ()
1660 Socket sock = new Socket (AddressFamily.InterNetwork,
1663 Socket listen = new Socket (AddressFamily.InterNetwork,
1666 IPAddress ip = IPAddress.Loopback;
1667 IPEndPoint ep = new IPEndPoint (ip, 1244);
1672 BCCalledBack.Reset ();
1674 BCConnected = false;
1676 sock.BeginConnect (ip, 1244, BCCallback, sock);
1678 if (BCCalledBack.WaitOne (2000, false) == false) {
1679 Assert.Fail ("BeginConnectAddressPort wait timed out");
1682 Assert.AreEqual (true, BCConnected, "BeginConnectAddressPort #1");
1689 public void BeginConnectAddressPortNull ()
1691 Socket sock = new Socket (AddressFamily.InterNetwork,
1694 IPAddress ip = null;
1697 sock.BeginConnect (ip, 1244, BCCallback,
1699 Assert.Fail ("BeginConnectAddressPortNull #1");
1700 } catch (ArgumentNullException) {
1702 Assert.Fail ("BeginConnectAddressPortNull #2");
1709 public void BeginConnectAddressPortListen ()
1711 Socket sock = new Socket (AddressFamily.InterNetwork,
1714 IPAddress ip = IPAddress.Loopback;
1715 IPEndPoint ep = new IPEndPoint (ip, 1245);
1721 sock.BeginConnect (ip, 1245, BCCallback, sock);
1722 Assert.Fail ("BeginConnectAddressPortListen #1");
1723 } catch (InvalidOperationException) {
1725 Assert.Fail ("BeginConnectAddressPortListen #2");
1732 [ExpectedException (typeof(ObjectDisposedException))]
1733 public void BeginConnectAddressPortClosed ()
1735 Socket sock = new Socket (AddressFamily.InterNetwork,
1738 IPAddress ip = IPAddress.Loopback;
1742 sock.BeginConnect (ip, 1244, BCCallback, sock);
1746 [Category ("NotOnMac")]
1748 * This is not a Mono bug.
1750 * By default, only 127.0.0.1 is enabled and you must explicitly
1751 * enable additional addresses using 'sudo ifconfig lo0 alias 127.0.0.1'.
1753 * I tested this on Mac OS 10.7.4; a 'ping 127.0.0.2' does not work
1754 * until I add that alias.
1757 public void BeginConnectMultiple ()
1759 Socket sock = new Socket (AddressFamily.InterNetwork,
1762 Socket listen = new Socket (AddressFamily.InterNetwork,
1765 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
1767 IPAddress[] ips = new IPAddress[4];
1769 ips[0] = IPAddress.Parse ("127.0.0.4");
1770 ips[1] = IPAddress.Parse ("127.0.0.3");
1771 ips[2] = IPAddress.Parse ("127.0.0.2");
1772 ips[3] = IPAddress.Parse ("127.0.0.1");
1777 BCCalledBack.Reset ();
1779 BCConnected = false;
1781 sock.BeginConnect (ips, 1246, BCCallback, sock);
1783 /* Longer wait here, because the ms runtime
1784 * takes a lot longer to not connect
1786 if (BCCalledBack.WaitOne (10000, false) == false) {
1787 Assert.Fail ("BeginConnectMultiple wait failed");
1790 Assert.AreEqual (true, BCConnected, "BeginConnectMultiple #1");
1791 Assert.AreEqual (AddressFamily.InterNetwork, sock.RemoteEndPoint.AddressFamily, "BeginConnectMultiple #2");
1792 IPEndPoint remep = (IPEndPoint)sock.RemoteEndPoint;
1794 Assert.AreEqual (IPAddress.Loopback, remep.Address, "BeginConnectMultiple #2");
1801 public void BeginConnectMultiple2 ()
1803 Socket sock = new Socket (AddressFamily.InterNetwork,
1806 Socket listen = new Socket (AddressFamily.InterNetwork,
1810 // Need at least two addresses.
1811 var ips = Dns.GetHostAddresses (string.Empty);
1813 Assert.Ignore ("This test needs at least two IP addresses.");
1815 var allIps = new IPAddress [ips.Length + 1];
1816 allIps [0] = IPAddress.Loopback;
1817 ips.CopyTo (allIps, 1);
1820 * Only bind to the loopback interface, so all the non-loopback
1821 * IP addresses will fail. BeginConnect()/EndConnect() should
1822 * succeed it it can connect to at least one of the requested
1825 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 1246);
1830 BCCalledBack.Reset ();
1832 BCConnected = false;
1834 sock.BeginConnect (allIps, 1246, BCCallback, sock);
1836 /* Longer wait here, because the ms runtime
1837 * takes a lot longer to not connect
1839 if (BCCalledBack.WaitOne (10000, false) == false) {
1840 Assert.Fail ("BeginConnectMultiple2 wait failed");
1843 Assert.AreEqual (true, BCConnected, "BeginConnectMultiple2 #1");
1844 Assert.AreEqual (AddressFamily.InterNetwork, sock.RemoteEndPoint.AddressFamily, "BeginConnectMultiple2 #2");
1845 IPEndPoint remep = (IPEndPoint)sock.RemoteEndPoint;
1847 Assert.AreEqual (IPAddress.Loopback, remep.Address, "BeginConnectMultiple2 #2");
1855 public void BeginConnectMultipleNull ()
1857 Socket sock = new Socket (AddressFamily.InterNetwork,
1860 IPAddress[] ips = null;
1863 sock.BeginConnect (ips, 1246, BCCallback,
1865 Assert.Fail ("BeginConnectMultipleNull #1");
1866 } catch (ArgumentNullException) {
1868 Assert.Fail ("BeginConnectMultipleNull #2");
1875 public void BeginConnectMultipleListen ()
1877 Socket sock = new Socket (AddressFamily.InterNetwork,
1880 IPAddress[] ips = new IPAddress[4];
1881 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
1884 ips[0] = IPAddress.Parse ("127.0.0.4");
1885 ips[1] = IPAddress.Parse ("127.0.0.3");
1886 ips[2] = IPAddress.Parse ("127.0.0.2");
1887 ips[3] = IPAddress.Parse ("127.0.0.1");
1893 sock.BeginConnect (ips, 1247, BCCallback,
1895 Assert.Fail ("BeginConnectMultipleListen #1");
1896 } catch (InvalidOperationException) {
1898 Assert.Fail ("BeginConnectMultipleListen #2");
1905 [ExpectedException (typeof(ObjectDisposedException))]
1906 public void BeginConnectMultipleClosed ()
1908 Socket sock = new Socket (AddressFamily.InterNetwork,
1911 IPAddress[] ips = new IPAddress[4];
1913 ips[0] = IPAddress.Parse ("127.0.0.4");
1914 ips[1] = IPAddress.Parse ("127.0.0.3");
1915 ips[2] = IPAddress.Parse ("127.0.0.2");
1916 ips[3] = IPAddress.Parse ("127.0.0.1");
1920 sock.BeginConnect (ips, 1247, BCCallback, sock);
1924 public void BeginConnectHostPortNull ()
1926 Socket sock = new Socket (AddressFamily.InterNetwork,
1931 sock.BeginConnect ((string)null, 0,
1933 Assert.Fail ("BeginConnectHostPort #1");
1934 } catch (ArgumentNullException) {
1936 Assert.Fail ("BeginConnectHostPort #2");
1943 public void BeginConnectHostPortListen ()
1945 Socket sock = new Socket (AddressFamily.InterNetwork,
1948 IPAddress ip = IPAddress.Loopback;
1949 IPEndPoint ep = new IPEndPoint (ip, 1248);
1955 sock.BeginConnect ("localhost", 1248,
1957 Assert.Fail ("BeginConnectHostPortListen #1");
1958 } catch (InvalidOperationException) {
1960 Assert.Fail ("BeginConnectHostPortListen #2");
1967 [Category ("NotWorking")] // Need to pick a non-IP AddressFamily that "works" on both mono and ms, this one only works on ms
1968 public void BeginConnectHostPortNotIP ()
1970 Socket sock = new Socket (AddressFamily.NetBios,
1971 SocketType.Seqpacket,
1972 ProtocolType.Unspecified);
1975 sock.BeginConnect ("localhost", 0, BCCallback,
1977 Assert.Fail ("BeginConnectHostPortNotIP #1");
1978 } catch (NotSupportedException) {
1980 Assert.Fail ("BeginConnectHostPortNotIP #2");
1987 [ExpectedException (typeof(ObjectDisposedException))]
1988 public void BeginConnectHostPortClosed ()
1990 Socket sock = new Socket (AddressFamily.InterNetwork,
1996 sock.BeginConnect ("localhost", 0, BCCallback, sock);
1999 static bool BDDisconnected = false;
2000 static ManualResetEvent BDCalledBack = new ManualResetEvent (false);
2002 private static void BDCallback (IAsyncResult asyncResult)
2004 Socket sock = (Socket)asyncResult.AsyncState;
2006 sock.EndDisconnect (asyncResult);
2007 BDDisconnected = true;
2009 BDCalledBack.Set ();
2013 [Category ("NotDotNet")] // "Needs XP or later"
2014 public void BeginDisconnect ()
2016 Socket sock = new Socket (AddressFamily.InterNetwork,
2019 Socket listen = new Socket (AddressFamily.InterNetwork,
2022 IPAddress ip = IPAddress.Loopback;
2023 IPEndPoint ep = new IPEndPoint (ip, 1254);
2028 sock.Connect (ip, 1254);
2030 Assert.AreEqual (true, sock.Connected, "BeginDisconnect #1");
2032 sock.Shutdown (SocketShutdown.Both);
2034 BDCalledBack.Reset ();
2035 BDDisconnected = false;
2037 sock.BeginDisconnect (false, BDCallback, sock);
2039 if (BDCalledBack.WaitOne (2000, false) == false) {
2040 Assert.Fail ("BeginDisconnect wait timed out");
2043 Assert.AreEqual (true, BDDisconnected, "BeginDisconnect #2");
2044 Assert.AreEqual (false, sock.Connected, "BeginDisconnect #3");
2051 public void BeginReceiveSocketError ()
2056 public void BeginReceiveGeneric ()
2061 public void BeginReceiveGenericSocketError ()
2065 private static void BSCallback (IAsyncResult asyncResult)
2067 Socket sock = (Socket)asyncResult.AsyncState;
2069 sock.EndSend (asyncResult);
2073 public void BeginSendNotConnected ()
2075 Socket sock = new Socket (AddressFamily.InterNetwork,
2079 byte[] send_bytes = new byte[] {10, 11, 12, 13};
2082 sock.BeginSend (send_bytes, 0,
2084 SocketFlags.None, BSCallback,
2086 Assert.Fail ("BeginSendNotConnected #1");
2087 } catch (SocketException ex) {
2088 Assert.AreEqual (10057, ex.ErrorCode, "BeginSendNotConnected #2");
2090 Assert.Fail ("BeginSendNotConnected #3");
2097 public void BeginSendSocketError ()
2102 public void BeginSendGeneric ()
2107 public void BeginSendGenericSocketError ()
2112 public void BindTwice ()
2114 Socket sock = new Socket (AddressFamily.InterNetwork,
2117 IPEndPoint ep1 = new IPEndPoint (IPAddress.Loopback,
2119 IPEndPoint ep2 = new IPEndPoint (IPAddress.Loopback,
2126 Assert.Fail ("BindTwice #1");
2127 } catch (SocketException ex) {
2128 Assert.AreEqual (10022, ex.ErrorCode, "BindTwice #2");
2130 Assert.Fail ("BindTwice #3");
2137 public void Close ()
2139 Socket sock = new Socket (AddressFamily.InterNetwork,
2142 Socket listen = new Socket (AddressFamily.InterNetwork,
2145 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
2153 Assert.AreEqual (true, sock.Connected, "Close #1");
2157 Thread.Sleep (3000);
2159 Assert.AreEqual (false, sock.Connected, "Close #2");
2165 public void ConnectAddressPort ()
2167 Socket sock = new Socket (AddressFamily.InterNetwork,
2170 Socket listen = new Socket (AddressFamily.InterNetwork,
2173 IPAddress ip = IPAddress.Loopback;
2174 IPEndPoint ep = new IPEndPoint (ip, 1249);
2179 sock.Connect (ip, 1249);
2181 Assert.AreEqual (true, sock.Connected, "ConnectAddressPort #1");
2188 public void ConnectAddressPortNull ()
2190 Socket sock = new Socket (AddressFamily.InterNetwork,
2193 IPAddress ip = null;
2196 sock.Connect (ip, 1249);
2197 Assert.Fail ("ConnectAddressPortNull #1");
2198 } catch (ArgumentNullException) {
2200 Assert.Fail ("ConnectAddressPortNull #2");
2207 public void ConnectAddressPortListen ()
2209 Socket sock = new Socket (AddressFamily.InterNetwork,
2212 IPAddress ip = IPAddress.Loopback;
2213 IPEndPoint ep = new IPEndPoint (ip, 1250);
2219 sock.Connect (ip, 1250);
2220 Assert.Fail ("ConnectAddressPortListen #1");
2221 } catch (InvalidOperationException) {
2223 Assert.Fail ("ConnectAddressPortListen #2");
2230 [ExpectedException (typeof(ObjectDisposedException))]
2231 public void ConnectAddressPortClosed ()
2233 Socket sock = new Socket (AddressFamily.InterNetwork,
2236 IPAddress ip = IPAddress.Loopback;
2240 sock.Connect (ip, 1250);
2244 [Category ("NotOnMac")] // MacOSX trashes the fd after the failed connect attempt to 127.0.0.4
2246 * This is not a Mono bug.
2248 * By default, only 127.0.0.1 is enabled and you must explicitly
2249 * enable additional addresses using 'sudo ifconfig lo0 alias 127.0.0.1'.
2251 * I tested this on Mac OS 10.7.4; a 'ping 127.0.0.2' does not work
2252 * until I add that alias.
2254 * However, after doing so, Mac OS treats these as separate addresses, ie. attempting
2255 * to connect to 127.0.0.4 yields a connection refused.
2257 * When using Connect(), the .NET runtime also throws an exception if connecting to
2258 * any of the IP addresses fails. This is different with BeginConnect()/EndConnect()
2259 * which succeeds when it can connect to at least one of the addresses.
2262 public void ConnectMultiple ()
2264 Socket sock = new Socket (AddressFamily.InterNetwork,
2267 Socket listen = new Socket (AddressFamily.InterNetwork,
2270 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
2272 IPAddress[] ips = new IPAddress[4];
2274 ips[0] = IPAddress.Parse ("127.0.0.4");
2275 ips[1] = IPAddress.Parse ("127.0.0.3");
2276 ips[2] = IPAddress.Parse ("127.0.0.2");
2277 ips[3] = IPAddress.Parse ("127.0.0.1");
2282 sock.Connect (ips, 1251);
2284 Assert.AreEqual (true, sock.Connected, "ConnectMultiple #1");
2285 Assert.AreEqual (AddressFamily.InterNetwork, sock.RemoteEndPoint.AddressFamily, "ConnectMultiple #2");
2286 IPEndPoint remep = (IPEndPoint)sock.RemoteEndPoint;
2288 Assert.AreEqual (IPAddress.Loopback, remep.Address, "ConnectMultiple #2");
2295 public void ConnectMultiple2 ()
2297 Socket sock = new Socket (AddressFamily.InterNetwork,
2300 Socket listen = new Socket (AddressFamily.InterNetwork,
2304 // Need at least two addresses.
2305 var ips = Dns.GetHostAddresses (string.Empty);
2307 Assert.Ignore ("This test needs at least two IP addresses.");
2309 var allIps = new IPAddress [ips.Length + 1];
2310 allIps [0] = IPAddress.Loopback;
2311 ips.CopyTo (allIps, 1);
2314 * Bind to IPAddress.Any; Connect() will fail unless it can
2315 * connect to all the addresses in allIps.
2317 IPEndPoint ep = new IPEndPoint (IPAddress.Any, 1251);
2322 sock.Connect (allIps, 1251);
2324 Assert.AreEqual (true, sock.Connected, "ConnectMultiple2 #1");
2325 Assert.AreEqual (AddressFamily.InterNetwork, sock.RemoteEndPoint.AddressFamily, "ConnectMultiple2 #2");
2326 IPEndPoint remep = (IPEndPoint)sock.RemoteEndPoint;
2328 Assert.AreEqual (IPAddress.Loopback, remep.Address, "ConnectMultiple2 #3");
2335 public void ConnectMultipleNull ()
2337 Socket sock = new Socket (AddressFamily.InterNetwork,
2340 IPAddress[] ips = null;
2343 sock.Connect (ips, 1251);
2344 Assert.Fail ("ConnectMultipleNull #1");
2345 } catch (ArgumentNullException) {
2347 Assert.Fail ("ConnectMultipleNull #2");
2354 public void ConnectMultipleListen ()
2356 Socket sock = new Socket (AddressFamily.InterNetwork,
2359 IPAddress[] ips = new IPAddress[4];
2360 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
2363 ips[0] = IPAddress.Parse ("127.0.0.4");
2364 ips[1] = IPAddress.Parse ("127.0.0.3");
2365 ips[2] = IPAddress.Parse ("127.0.0.2");
2366 ips[3] = IPAddress.Parse ("127.0.0.1");
2372 sock.Connect (ips, 1252);
2373 Assert.Fail ("ConnectMultipleListen #1");
2374 } catch (InvalidOperationException) {
2376 Assert.Fail ("ConnectMultipleListen #2");
2383 [ExpectedException (typeof(ObjectDisposedException))]
2384 public void ConnectMultipleClosed ()
2386 Socket sock = new Socket (AddressFamily.InterNetwork,
2389 IPAddress[] ips = new IPAddress[4];
2391 ips[0] = IPAddress.Parse ("127.0.0.4");
2392 ips[1] = IPAddress.Parse ("127.0.0.3");
2393 ips[2] = IPAddress.Parse ("127.0.0.2");
2394 ips[3] = IPAddress.Parse ("127.0.0.1");
2398 sock.Connect (ips, 1252);
2402 public void ConnectHostPortNull ()
2404 Socket sock = new Socket (AddressFamily.InterNetwork,
2409 sock.Connect ((string)null, 0);
2410 Assert.Fail ("ConnectHostPort #1");
2411 } catch (ArgumentNullException) {
2413 Assert.Fail ("ConnectHostPort #2");
2420 public void ConnectHostPortListen ()
2422 Socket sock = new Socket (AddressFamily.InterNetwork,
2425 IPAddress ip = IPAddress.Loopback;
2426 IPEndPoint ep = new IPEndPoint (ip, 1253);
2432 sock.Connect ("localhost", 1253);
2433 Assert.Fail ("ConnectHostPortListen #1");
2434 } catch (InvalidOperationException) {
2436 Assert.Fail ("ConnectHostPortListen #2");
2443 [Category ("NotWorking")] // Need to pick a non-IP AddressFamily that "works" on both mono and ms, this one only works on ms
2444 public void ConnectHostPortNotIP ()
2446 Socket sock = new Socket (AddressFamily.NetBios,
2447 SocketType.Seqpacket,
2448 ProtocolType.Unspecified);
2451 sock.Connect ("localhost", 0);
2452 Assert.Fail ("ConnectHostPortNotIP #1");
2453 } catch (NotSupportedException) {
2455 Assert.Fail ("ConnectHostPortNotIP #2");
2462 [ExpectedException (typeof(ObjectDisposedException))]
2463 public void ConnectHostPortClosed ()
2465 Socket sock = new Socket (AddressFamily.InterNetwork,
2471 sock.Connect ("localhost", 0);
2475 [Category ("NotDotNet")] // "Needs XP or later"
2476 public void Disconnect ()
2478 Socket sock = new Socket (AddressFamily.InterNetwork,
2481 Socket listen = new Socket (AddressFamily.InterNetwork,
2484 IPAddress ip = IPAddress.Loopback;
2485 IPEndPoint ep = new IPEndPoint (ip, 1255);
2490 sock.Connect (ip, 1255);
2492 Assert.AreEqual (true, sock.Connected, "Disconnect #1");
2494 sock.Shutdown (SocketShutdown.Both);
2496 sock.Disconnect (false);
2498 Assert.AreEqual (false, sock.Connected, "BeginDisconnect #3");
2505 public void DuplicateAndClose ()
2510 public void IOControl ()
2515 public void ReceiveGeneric ()
2519 IPEndPoint endpoint = new IPEndPoint(IPAddress.Loopback, 1258);
2521 Socket listensock = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
2522 listensock.Bind (endpoint);
2523 listensock.Listen(1);
2525 Socket sendsock = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
2526 sendsock.Connect(endpoint);
2528 Socket clientsock = listensock.Accept();
2530 byte[] sendbuf = new byte[256];
2532 for(i = 0; i < 256; i++) {
2533 sendbuf[i] = (byte)i;
2535 for (i = 4; i < 6; i++) {
2536 Assert.AreEqual (sendbuf[i], (byte)i,
2537 "#1/" + i.ToString());
2541 sendsock.Send (sendbuf, 0, 256, SocketFlags.None,
2545 byte[] recvbuf = new byte[256];
2546 List<ArraySegment<byte>> recvbuflist = new List<ArraySegment<byte>>(2);
2547 recvbuflist.Add(new ArraySegment<byte>(recvbuf, 4, 2));
2548 recvbuflist.Add(new ArraySegment<byte>(recvbuf, 20, 230));
2550 clientsock.Receive (recvbuflist);
2552 /* recvbuf should now hold the first 2 bytes
2553 * of sendbuf from pos 4, and the next 230
2554 * bytes of sendbuf from pos 20
2557 for (i = 0; i < 2; i++) {
2558 Assert.AreEqual (sendbuf[i], recvbuf[i + 4],
2559 "#2/" + i.ToString());
2561 for (i = 2; i < 232; i++) {
2562 Assert.AreEqual (sendbuf[i], recvbuf[i + 18],
2563 "#2/" + i.ToString());
2567 clientsock.Close ();
2568 listensock.Close ();
2572 public void SendGeneric ()
2576 IPEndPoint endpoint = new IPEndPoint(IPAddress.Loopback, 1259);
2578 Socket listensock = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
2579 listensock.Bind (endpoint);
2580 listensock.Listen(1);
2582 Socket sendsock = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
2583 sendsock.Connect(endpoint);
2585 Socket clientsock = listensock.Accept();
2587 byte[] sendbuf = new byte[256];
2588 List<ArraySegment<byte>> sendbuflist = new List<ArraySegment<byte>>(2);
2590 sendbuflist.Add(new ArraySegment<byte>(sendbuf, 4, 2));
2591 sendbuflist.Add(new ArraySegment<byte>(sendbuf, 20, 230));
2593 for(i = 0; i < 256; i++) {
2594 sendbuf[i] = (byte)i;
2596 for (i = 4; i < 6; i++) {
2597 Assert.AreEqual (sendbuf[i], (byte)i,
2598 "#1/" + i.ToString());
2602 sendsock.Send (sendbuflist, SocketFlags.None, out err);
2605 byte[] recvbuf = new byte[256];
2607 clientsock.Receive (recvbuf);
2609 /* The first 2 bytes of recvbuf should now
2610 * hold 2 bytes of sendbuf from pos 4, and the
2611 * next 230 bytes of recvbuf should be sendbuf
2615 for (i = 0; i < 2; i++) {
2616 Assert.AreEqual (recvbuf[i], sendbuf[i + 4],
2617 "#2/" + i.ToString());
2619 for (i = 2; i < 232; i++) {
2620 Assert.AreEqual (recvbuf[i], sendbuf[i + 18],
2621 "#2/" + i.ToString());
2625 clientsock.Close ();
2626 listensock.Close ();
2630 public void ListenNotBound ()
2632 Socket sock = new Socket (AddressFamily.InterNetwork,
2638 Assert.Fail ("ListenNotBound #1");
2639 } catch (SocketException ex) {
2640 Assert.AreEqual (10022, ex.ErrorCode, "ListenNotBound #2");
2642 Assert.Fail ("ListenNotBound #3");
2649 static Socket CWRSocket;
2650 static bool CWRReceiving = true;
2651 static ManualResetEvent CWRReady = new ManualResetEvent (false);
2653 private static void CWRReceiveThread ()
2655 byte[] buf = new byte[256];
2658 CWRSocket.Receive (buf);
2659 } catch (SocketException) {
2660 CWRReceiving = false;
2667 public void CloseWhileReceiving ()
2669 CWRSocket = new Socket (AddressFamily.InterNetwork,
2672 CWRSocket.Bind (new IPEndPoint (IPAddress.Loopback,
2675 Thread recv_thread = new Thread (new ThreadStart (CWRReceiveThread));
2677 recv_thread.Start ();
2678 Thread.Sleep (250); /* Wait for the thread to be already receiving */
2681 if (CWRReady.WaitOne (1000, false) == false) {
2682 Assert.Fail ("CloseWhileReceiving wait timed out");
2685 Assert.IsFalse (CWRReceiving);
2688 static bool RRCLastRead = false;
2689 static ManualResetEvent RRCReady = new ManualResetEvent (false);
2691 private static void RRCClientThread ()
2693 byte[] bytes = new byte[8];
2696 Socket sock = new Socket (AddressFamily.InterNetwork,
2699 sock.Connect (new IPEndPoint (IPAddress.Loopback,
2702 NetworkStream stream = new NetworkStream (sock);
2704 readbyte = stream.ReadByte ();
2705 Assert.AreEqual (0, readbyte, "ReceiveRemoteClosed #1");
2707 stream.Read (bytes, 0, 0);
2709 readbyte = stream.ReadByte ();
2710 Assert.AreEqual (0, readbyte, "ReceiveRemoteClosed #2");
2712 stream.Read (bytes, 0, 0);
2714 readbyte = stream.ReadByte ();
2715 Assert.AreEqual (-1, readbyte, "ReceiveRemoteClosed #3");
2723 [Test] // Receive (Byte [])
2724 public void Receive1_Buffer_Null ()
2726 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
2730 s.Receive ((byte []) null);
2732 } catch (ArgumentNullException ex) {
2733 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
2734 Assert.IsNull (ex.InnerException, "#3");
2735 Assert.IsNotNull (ex.Message, "#4");
2736 Assert.AreEqual ("buffer", ex.ParamName, "#5");
2742 [Test] // Receive (Byte [])
2743 public void Receive1_Socket_Closed ()
2745 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
2750 s.Receive ((byte []) null);
2752 } catch (ObjectDisposedException ex) {
2753 // Cannot access a disposed object
2754 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
2755 Assert.IsNull (ex.InnerException, "#3");
2756 Assert.IsNotNull (ex.Message, "#4");
2757 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
2761 [Test] // Receive (Byte [], SocketFlags)
2762 public void Receive2_Buffer_Null ()
2764 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
2768 s.Receive ((byte []) null, (SocketFlags) 666);
2770 } catch (ArgumentNullException ex) {
2771 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
2772 Assert.IsNull (ex.InnerException, "#3");
2773 Assert.IsNotNull (ex.Message, "#4");
2774 Assert.AreEqual ("buffer", ex.ParamName, "#5");
2780 [Test] // Receive (Byte [], SocketFlags)
2781 public void Receive2_Socket_Closed ()
2783 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
2788 s.Receive ((byte []) null, (SocketFlags) 666);
2790 } catch (ObjectDisposedException ex) {
2791 // Cannot access a disposed object
2792 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
2793 Assert.IsNull (ex.InnerException, "#3");
2794 Assert.IsNotNull (ex.Message, "#4");
2795 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
2799 [Test] // Receive (Byte [], Int32, SocketFlags)
2800 public void Receive3_Buffer_Null ()
2802 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
2806 s.Receive ((byte []) null, 0, (SocketFlags) 666);
2808 } catch (ArgumentNullException ex) {
2809 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
2810 Assert.IsNull (ex.InnerException, "#3");
2811 Assert.IsNotNull (ex.Message, "#4");
2812 Assert.AreEqual ("buffer", ex.ParamName, "#5");
2818 [Test] // Receive (Byte [], Int32, SocketFlags)
2819 public void Receive3_Socket_Closed ()
2821 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
2826 s.Receive ((byte []) null, 0, (SocketFlags) 666);
2828 } catch (ObjectDisposedException ex) {
2829 // Cannot access a disposed object
2830 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
2831 Assert.IsNull (ex.InnerException, "#3");
2832 Assert.IsNotNull (ex.Message, "#4");
2833 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
2837 [Test] // Receive (Byte [], Int32, Int32, SocketFlags)
2838 public void Receive4_Buffer_Null ()
2840 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
2844 s.Receive ((byte []) null, 0, 0, (SocketFlags) 666);
2846 } catch (ArgumentNullException ex) {
2847 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
2848 Assert.IsNull (ex.InnerException, "#3");
2849 Assert.IsNotNull (ex.Message, "#4");
2850 Assert.AreEqual ("buffer", ex.ParamName, "#5");
2856 [Test] // Receive (Byte [], Int32, Int32, SocketFlags)
2857 public void Receive4_Socket_Closed ()
2859 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
2864 s.Receive ((byte []) null, 0, 0, (SocketFlags) 666);
2866 } catch (ObjectDisposedException ex) {
2867 // Cannot access a disposed object
2868 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
2869 Assert.IsNull (ex.InnerException, "#3");
2870 Assert.IsNotNull (ex.Message, "#4");
2871 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
2876 [Test] // Receive (Byte [], Int32, Int32, SocketFlags, out SocketError)
2877 public void Receive5_Buffer_Null ()
2879 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
2884 s.Receive ((byte []) null, 0, 0, SocketFlags.None, out error);
2886 } catch (ArgumentNullException ex) {
2887 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
2888 Assert.IsNull (ex.InnerException, "#3");
2889 Assert.IsNotNull (ex.Message, "#4");
2890 Assert.AreEqual ("buffer", ex.ParamName, "#5");
2896 [Test] // Receive (Byte [], Int32, Int32, SocketFlags, out SocketError)
2897 public void Receive5_Socket_Closed ()
2899 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
2905 s.Receive ((byte []) null, 0, 0, SocketFlags.None, out error);
2907 } catch (ObjectDisposedException ex) {
2908 // Cannot access a disposed object
2909 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
2910 Assert.IsNull (ex.InnerException, "#3");
2911 Assert.IsNotNull (ex.Message, "#4");
2912 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
2916 [Test] // Receive (IList<ArraySegment<Byte>>)
2917 public void Receive6_Buffers_Null ()
2919 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
2923 s.Receive ((IList<ArraySegment<byte>>) null);
2925 } catch (ArgumentNullException ex) {
2926 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
2927 Assert.IsNull (ex.InnerException, "#3");
2928 Assert.IsNotNull (ex.Message, "#4");
2929 Assert.AreEqual ("buffers", ex.ParamName, "#5");
2935 [Test] // Receive (IList<ArraySegment<Byte>>)
2936 public void Receive6_Socket_Closed ()
2938 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
2943 s.Receive ((IList<ArraySegment<byte>>) null);
2945 } catch (ObjectDisposedException ex) {
2946 // Cannot access a disposed object
2947 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
2948 Assert.IsNull (ex.InnerException, "#3");
2949 Assert.IsNotNull (ex.Message, "#4");
2950 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
2954 [Test] // Receive (IList<ArraySegment<Byte>>, SocketFlags)
2955 public void Receive7_Buffers_Null ()
2957 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
2961 s.Receive ((IList<ArraySegment<byte>>) null, (SocketFlags) 666);
2963 } catch (ArgumentNullException ex) {
2964 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
2965 Assert.IsNull (ex.InnerException, "#3");
2966 Assert.IsNotNull (ex.Message, "#4");
2967 Assert.AreEqual ("buffers", ex.ParamName, "#5");
2973 [Test] // Receive (IList<ArraySegment<Byte>>, SocketFlags)
2974 public void Receive7_Socket_Closed ()
2976 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
2981 s.Receive ((IList<ArraySegment<byte>>) null, (SocketFlags) 666);
2983 } catch (ObjectDisposedException ex) {
2984 // Cannot access a disposed object
2985 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
2986 Assert.IsNull (ex.InnerException, "#3");
2987 Assert.IsNotNull (ex.Message, "#4");
2988 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
2992 [Test] // Receive (IList<ArraySegment<Byte>>, SocketFlags, out SocketError)
2993 public void Receive8_Buffers_Null ()
2995 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3000 s.Receive ((IList<ArraySegment<byte>>) null, (SocketFlags) 666,
3003 } catch (ArgumentNullException ex) {
3004 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
3005 Assert.IsNull (ex.InnerException, "#3");
3006 Assert.IsNotNull (ex.Message, "#4");
3007 Assert.AreEqual ("buffers", ex.ParamName, "#5");
3013 [Test] // Receive (IList<ArraySegment<Byte>>, SocketFlags, out SocketError)
3014 public void Receive8_Socket_Closed ()
3016 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3022 s.Receive ((IList<ArraySegment<byte>>) null, (SocketFlags) 666,
3025 } catch (ObjectDisposedException ex) {
3026 // Cannot access a disposed object
3027 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
3028 Assert.IsNull (ex.InnerException, "#3");
3029 Assert.IsNotNull (ex.Message, "#4");
3030 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
3037 [Test] // ReceiveFrom (Byte [], ref EndPoint)
3038 public void ReceiveFrom1_Buffer_Null ()
3040 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3043 EndPoint remoteEP = new IPEndPoint (IPAddress.Loopback, 8001);
3045 s.ReceiveFrom ((Byte []) null, ref remoteEP);
3047 } catch (ArgumentNullException ex) {
3048 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
3049 Assert.IsNull (ex.InnerException, "#3");
3050 Assert.IsNotNull (ex.Message, "#4");
3051 Assert.AreEqual ("buffer", ex.ParamName, "#5");
3057 [Test] // ReceiveFrom (Byte [], ref EndPoint)
3058 public void ReceiveFrom1_RemoteEP_Null ()
3060 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3063 byte [] buffer = new byte [0];
3064 EndPoint remoteEP = null;
3066 s.ReceiveFrom (buffer, ref remoteEP);
3068 } catch (ArgumentNullException ex) {
3069 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
3070 Assert.IsNull (ex.InnerException, "#3");
3071 Assert.IsNotNull (ex.Message, "#4");
3072 Assert.AreEqual ("remoteEP", ex.ParamName, "#5");
3078 [Test] // ReceiveFrom (Byte [], ref EndPoint)
3079 public void ReceiveFrom1_Socket_Closed ()
3081 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3085 EndPoint remoteEP = new IPEndPoint (IPAddress.Loopback, 8001);
3087 s.ReceiveFrom ((Byte []) null, ref remoteEP);
3089 } catch (ObjectDisposedException ex) {
3090 // Cannot access a disposed object
3091 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
3092 Assert.IsNull (ex.InnerException, "#3");
3093 Assert.IsNotNull (ex.Message, "#4");
3094 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
3098 [Test] // ReceiveFrom (Byte [], SocketFlags, ref EndPoint)
3099 public void ReceiveFrom2_Buffer_Null ()
3101 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3104 EndPoint remoteEP = new IPEndPoint (IPAddress.Loopback, 8001);
3106 s.ReceiveFrom ((Byte []) null, (SocketFlags) 666, ref remoteEP);
3108 } catch (ArgumentNullException ex) {
3109 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
3110 Assert.IsNull (ex.InnerException, "#3");
3111 Assert.IsNotNull (ex.Message, "#4");
3112 Assert.AreEqual ("buffer", ex.ParamName, "#5");
3118 [Test] // ReceiveFrom (Byte [], SocketFlags, ref EndPoint)
3119 public void ReceiveFrom2_RemoteEP_Null ()
3121 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3124 byte [] buffer = new byte [5];
3125 EndPoint remoteEP = null;
3127 s.ReceiveFrom (buffer, (SocketFlags) 666, ref remoteEP);
3129 } catch (ArgumentNullException ex) {
3130 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
3131 Assert.IsNull (ex.InnerException, "#3");
3132 Assert.IsNotNull (ex.Message, "#4");
3133 Assert.AreEqual ("remoteEP", ex.ParamName, "#5");
3139 [Test] // ReceiveFrom (Byte [], SocketFlags, ref EndPoint)
3140 public void ReceiveFrom2_Socket_Closed ()
3142 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3146 EndPoint remoteEP = new IPEndPoint (IPAddress.Loopback, 8001);
3148 s.ReceiveFrom ((Byte []) null, (SocketFlags) 666, ref remoteEP);
3150 } catch (ObjectDisposedException ex) {
3151 // Cannot access a disposed object
3152 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
3153 Assert.IsNull (ex.InnerException, "#3");
3154 Assert.IsNotNull (ex.Message, "#4");
3155 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
3159 [Test] // ReceiveFrom (Byte [], Int32, SocketFlags, ref EndPoint)
3160 public void ReceiveFrom3_Buffer_Null ()
3162 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3165 EndPoint remoteEP = new IPEndPoint (IPAddress.Loopback, 8001);
3167 s.ReceiveFrom ((Byte []) null, -1, (SocketFlags) 666,
3170 } catch (ArgumentNullException ex) {
3171 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
3172 Assert.IsNull (ex.InnerException, "#3");
3173 Assert.IsNotNull (ex.Message, "#4");
3174 Assert.AreEqual ("buffer", ex.ParamName, "#5");
3180 [Test] // ReceiveFrom (Byte [], Int32, SocketFlags, ref EndPoint)
3181 public void ReceiveFrom3_RemoteEP_Null ()
3183 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3186 byte [] buffer = new byte [5];
3187 EndPoint remoteEP = null;
3189 s.ReceiveFrom (buffer, -1, (SocketFlags) 666, ref remoteEP);
3191 } catch (ArgumentNullException ex) {
3192 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
3193 Assert.IsNull (ex.InnerException, "#3");
3194 Assert.IsNotNull (ex.Message, "#4");
3195 Assert.AreEqual ("remoteEP", ex.ParamName, "#5");
3201 [Test] // ReceiveFrom (Byte [], Int32, SocketFlags, ref EndPoint)
3202 public void ReceiveFrom3_Size_OutOfRange ()
3205 byte [] buffer = new byte [5];
3206 EndPoint remoteEP = new IPEndPoint (IPAddress.Loopback, 8001);
3209 s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3212 s.ReceiveFrom (buffer, -1, (SocketFlags) 666, ref remoteEP);
3213 Assert.Fail ("#A1");
3214 } catch (ArgumentOutOfRangeException ex) {
3215 // Specified argument was out of the range of valid values
3216 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#A2");
3217 Assert.IsNull (ex.InnerException, "#A3");
3218 Assert.IsNotNull (ex.Message, "#A4");
3219 Assert.AreEqual ("size", ex.ParamName, "#A5");
3224 // size > buffer length
3225 s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3228 s.ReceiveFrom (buffer, (buffer.Length + 1), (SocketFlags) 666,
3230 Assert.Fail ("#B1");
3231 } catch (ArgumentOutOfRangeException ex) {
3232 // Specified argument was out of the range of valid values
3233 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#B2");
3234 Assert.IsNull (ex.InnerException, "#B3");
3235 Assert.IsNotNull (ex.Message, "#B4");
3236 Assert.AreEqual ("size", ex.ParamName, "#B5");
3242 [Test] // ReceiveFrom (Byte [], Int32, SocketFlags, ref EndPoint)
3243 public void ReceiveFrom3_Socket_Closed ()
3245 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3249 EndPoint remoteEP = new IPEndPoint (IPAddress.Loopback, 8001);
3251 s.ReceiveFrom ((Byte []) null, -1, (SocketFlags) 666,
3254 } catch (ObjectDisposedException ex) {
3255 // Cannot access a disposed object
3256 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
3257 Assert.IsNull (ex.InnerException, "#3");
3258 Assert.IsNotNull (ex.Message, "#4");
3259 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
3263 [Test] // ReceiveFrom (Byte [], Int32, Int32, SocketFlags, EndPoint)
3264 public void ReceiveFrom4_Buffer_Null ()
3266 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3268 EndPoint remoteEP = new IPEndPoint (IPAddress.Loopback, 8001);
3271 s.ReceiveFrom ((Byte []) null, -1, -1, (SocketFlags) 666,
3274 } catch (ArgumentNullException ex) {
3275 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
3276 Assert.IsNull (ex.InnerException, "#3");
3277 Assert.IsNotNull (ex.Message, "#4");
3278 Assert.AreEqual ("buffer", ex.ParamName, "#5");
3282 [Test] // ReceiveFrom (Byte [], Int32, Int32, SocketFlags, EndPoint)
3283 public void ReceiveFrom4_Offset_OutOfRange ()
3286 byte [] buffer = new byte [5];
3287 EndPoint remoteEP = new IPEndPoint (IPAddress.Loopback, 8001);
3290 s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3293 s.ReceiveFrom (buffer, -1, 0, (SocketFlags) 666,
3295 Assert.Fail ("#A1");
3296 } catch (ArgumentOutOfRangeException ex) {
3297 // Specified argument was out of the range of valid values
3298 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#A2");
3299 Assert.IsNull (ex.InnerException, "#A3");
3300 Assert.IsNotNull (ex.Message, "#A4");
3301 Assert.AreEqual ("offset", ex.ParamName, "#A5");
3306 // offset > buffer length
3307 s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3310 s.ReceiveFrom (buffer, (buffer.Length + 1), 0, (SocketFlags) 666,
3312 Assert.Fail ("#B1");
3313 } catch (ArgumentOutOfRangeException ex) {
3314 // Specified argument was out of the range of valid values
3315 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#B2");
3316 Assert.IsNull (ex.InnerException, "#B3");
3317 Assert.IsNotNull (ex.Message, "#B4");
3318 Assert.AreEqual ("offset", ex.ParamName, "#B5");
3324 [Test] // ReceiveFrom (Byte [], Int32, Int32, SocketFlags, ref IPEndPoint)
3325 public void ReceiveFrom4_RemoteEP_Null ()
3327 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3329 byte [] buffer = new byte [5];
3330 EndPoint remoteEP = null;
3333 s.ReceiveFrom (buffer, -1, -1, (SocketFlags) 666, ref remoteEP);
3335 } catch (ArgumentNullException ex) {
3336 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
3337 Assert.IsNull (ex.InnerException, "#3");
3338 Assert.IsNotNull (ex.Message, "#4");
3339 Assert.AreEqual ("remoteEP", ex.ParamName, "#5");
3345 [Test] // ReceiveFrom (Byte [], Int32, Int32, SocketFlags, EndPoint)
3346 public void ReceiveFrom4_Size_OutOfRange ()
3349 byte [] buffer = new byte [5];
3350 EndPoint remoteEP = new IPEndPoint (IPAddress.Loopback, 8001);
3353 s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3356 s.ReceiveFrom (buffer, 0, -1, (SocketFlags) 666,
3358 Assert.Fail ("#A1");
3359 } catch (ArgumentOutOfRangeException ex) {
3360 // Specified argument was out of the range of valid values
3361 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#A2");
3362 Assert.IsNull (ex.InnerException, "#A3");
3363 Assert.IsNotNull (ex.Message, "#A4");
3364 Assert.AreEqual ("size", ex.ParamName, "#A5");
3369 // size > buffer length
3370 s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3373 s.ReceiveFrom (buffer, 0, (buffer.Length + 1), (SocketFlags) 666,
3375 Assert.Fail ("#B1");
3376 } catch (ArgumentOutOfRangeException ex) {
3377 // Specified argument was out of the range of valid values
3378 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#B2");
3379 Assert.IsNull (ex.InnerException, "#B3");
3380 Assert.IsNotNull (ex.Message, "#B4");
3381 Assert.AreEqual ("size", ex.ParamName, "#B5");
3386 // offset + size > buffer length
3387 s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3390 s.ReceiveFrom (buffer, 2, 4, (SocketFlags) 666, ref remoteEP);
3391 Assert.Fail ("#C1");
3392 } catch (ArgumentOutOfRangeException ex) {
3393 // Specified argument was out of the range of valid values
3394 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#C2");
3395 Assert.IsNull (ex.InnerException, "#C3");
3396 Assert.IsNotNull (ex.Message, "#C4");
3397 Assert.AreEqual ("size", ex.ParamName, "#C5");
3403 [Test] // ReceiveFrom (Byte [], Int32, Int32, SocketFlags, ref EndPoint)
3404 public void ReceiveFrom4_Socket_Closed ()
3406 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3410 byte [] buffer = new byte [5];
3411 EndPoint remoteEP = new IPEndPoint (IPAddress.Loopback, 8001);
3413 s.ReceiveFrom (buffer, -1, -1, (SocketFlags) 666,
3416 } catch (ObjectDisposedException ex) {
3417 // Cannot access a disposed object
3418 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
3419 Assert.IsNull (ex.InnerException, "#3");
3420 Assert.IsNotNull (ex.Message, "#4");
3421 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
3426 public void ReceiveRemoteClosed ()
3428 Socket sock = new Socket (AddressFamily.InterNetwork,
3431 sock.Bind (new IPEndPoint (IPAddress.Loopback, 1257));
3435 Thread client_thread = new Thread (new ThreadStart (RRCClientThread));
3436 client_thread.Start ();
3438 Socket client = sock.Accept ();
3439 NetworkStream stream = new NetworkStream (client);
3440 stream.WriteByte (0x00);
3441 stream.WriteByte (0x00);
3445 RRCReady.WaitOne (1000, false);
3446 Assert.IsTrue (RRCLastRead);
3450 // Test case for bug #471580
3452 public void UdpDoubleBind ()
3454 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
3455 s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, 1);
3457 s.Bind (new IPEndPoint (IPAddress.Any, 12345));
3459 Socket ss = new Socket (AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
3460 ss.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, 1);
3462 ss.Bind (new IPEndPoint (IPAddress.Any, 12345));
3464 // If we make it this far, we succeeded.
3472 [Category ("NotOnMac")]
3473 public void ConnectedProperty ()
3475 TcpListener listener = new TcpListener (IPAddress.Loopback, 23456);
3478 Socket client = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
3479 client.Connect (IPAddress.Loopback, 23456);
3480 Socket server = listener.AcceptSocket ();
3483 server.EndSend(server.BeginSend (new byte[10], 0, 10, SocketFlags.None, null, null));
3486 server.EndReceive (server.BeginReceive (new byte[10], 0, 10, SocketFlags.None, null, null));
3489 Assert.IsTrue (!client.Connected);
3490 Assert.IsTrue (!server.Connected);
3499 [Test] // GetSocketOption (SocketOptionLevel, SocketOptionName)
3500 public void GetSocketOption1_Socket_Closed ()
3502 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
3505 s.GetSocketOption (0, 0);
3507 } catch (ObjectDisposedException ex) {
3508 // Cannot access a disposed object
3509 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
3510 Assert.IsNull (ex.InnerException, "#3");
3511 Assert.IsNotNull (ex.Message, "#4");
3512 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
3516 [Test] // GetSocketOption (SocketOptionLevel, SocketOptionName, Byte [])
3517 public void GetSocketOption2_OptionValue_Null ()
3519 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
3521 s.GetSocketOption (SocketOptionLevel.Socket, SocketOptionName.Linger,
3524 } catch (SocketException ex) {
3525 // The system detected an invalid pointer address in attempting
3526 // to use a pointer argument in a call
3527 Assert.AreEqual (typeof (SocketException), ex.GetType (), "#2");
3528 Assert.AreEqual (10014, ex.ErrorCode, "#3");
3529 Assert.IsNull (ex.InnerException, "#4");
3530 Assert.IsNotNull (ex.Message, "#5");
3531 Assert.AreEqual (10014, ex.NativeErrorCode, "#6");
3533 Assert.AreEqual (SocketError.Fault, ex.SocketErrorCode, "#7");
3538 [Test] // GetSocketOption (SocketOptionLevel, SocketOptionName, Byte [])
3539 public void GetSocketOption2_Socket_Closed ()
3541 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
3544 s.GetSocketOption (0, 0, (byte []) null);
3546 } catch (ObjectDisposedException ex) {
3547 // Cannot access a disposed object
3548 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
3549 Assert.IsNull (ex.InnerException, "#3");
3550 Assert.IsNotNull (ex.Message, "#4");
3551 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
3555 [Test] // GetSocketOption (SocketOptionLevel, SocketOptionName, Int32)
3556 public void GetSocketOption3_Socket_Closed ()
3558 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
3561 s.GetSocketOption (0, 0, 0);
3563 } catch (ObjectDisposedException ex) {
3564 // Cannot access a disposed object
3565 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
3566 Assert.IsNull (ex.InnerException, "#3");
3567 Assert.IsNotNull (ex.Message, "#4");
3568 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
3572 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Byte [])
3573 public void SetSocketOption1_DontLinger ()
3575 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
3576 s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.DontLinger,
3577 new byte [] { 0x00 });
3578 s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.DontLinger,
3579 new byte [] { 0x01 });
3583 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Byte [])
3584 public void SetSocketOption1_DontLinger_Null ()
3586 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
3588 s.SetSocketOption (SocketOptionLevel.Socket,
3589 SocketOptionName.DontLinger, (byte []) null);
3591 } catch (SocketException ex) {
3592 // The system detected an invalid pointer address in attempting
3593 // to use a pointer argument in a call
3594 Assert.AreEqual (typeof (SocketException), ex.GetType (), "#2");
3595 Assert.AreEqual (10014, ex.ErrorCode, "#3");
3596 Assert.IsNull (ex.InnerException, "#4");
3597 Assert.IsNotNull (ex.Message, "#5");
3598 Assert.AreEqual (10014, ex.NativeErrorCode, "#6");
3600 Assert.AreEqual (SocketError.Fault, ex.SocketErrorCode, "#7");
3606 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Byte [])
3607 public void SetSocketOption1_Linger_Null ()
3609 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
3611 s.SetSocketOption (SocketOptionLevel.Socket,
3612 SocketOptionName.DontLinger, (byte []) null);
3614 } catch (SocketException ex) {
3615 // The system detected an invalid pointer address in attempting
3616 // to use a pointer argument in a call
3617 Assert.AreEqual (typeof (SocketException), ex.GetType (), "#2");
3618 Assert.AreEqual (10014, ex.ErrorCode, "#3");
3619 Assert.IsNull (ex.InnerException, "#4");
3620 Assert.IsNotNull (ex.Message, "#5");
3621 Assert.AreEqual (10014, ex.NativeErrorCode, "#6");
3623 Assert.AreEqual (SocketError.Fault, ex.SocketErrorCode, "#7");
3629 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Byte [])
3630 public void SetSocketOption1_Socket_Close ()
3632 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
3635 s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.DontLinger,
3636 new byte [] { 0x00 });
3638 } catch (ObjectDisposedException ex) {
3639 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
3640 Assert.IsNull (ex.InnerException, "#3");
3641 Assert.IsNotNull (ex.Message, "#4");
3642 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
3646 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Int32)
3647 public void SetSocketOption2_DontLinger ()
3649 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
3650 s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.DontLinger, 0);
3651 s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.DontLinger, 5);
3655 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Int32)
3656 [Category ("NotWorking")]
3657 public void SetSocketOption2_Linger ()
3659 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
3660 s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.Linger, 0);
3661 s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.Linger, 5);
3665 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Int32)
3666 public void SetSocketOption2_Socket_Closed ()
3668 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
3671 s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.DontLinger, 0);
3673 } catch (ObjectDisposedException ex) {
3674 // Cannot access a disposed object
3675 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
3676 Assert.IsNull (ex.InnerException, "#3");
3677 Assert.IsNotNull (ex.Message, "#4");
3678 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
3682 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
3683 public void SetSocketOption3_AddMembershipIPv4_IPv6MulticastOption ()
3685 IPAddress mcast_addr = IPAddress.Parse ("239.255.255.250");
3687 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp)) {
3688 s.Bind (new IPEndPoint (IPAddress.Any, 1901));
3690 s.SetSocketOption (SocketOptionLevel.IP, SocketOptionName.AddMembership,
3691 new IPv6MulticastOption (mcast_addr));
3693 } catch (ArgumentException ex) {
3694 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
3695 Assert.IsNull (ex.InnerException, "#3");
3696 Assert.IsNotNull (ex.Message, "#4");
3698 // The specified value is not a valid 'MulticastOption'
3699 Assert.IsTrue (ex.Message.IndexOf ("'MulticastOption'") != -1, "#5:" + ex.Message);
3700 Assert.AreEqual ("optionValue", ex.ParamName, "#6");
3702 Assert.AreEqual ("optionValue", ex.Message, "#5");
3703 Assert.IsNull (ex.ParamName, "#6");
3709 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
3710 public void SetSocketOption3_AddMembershipIPv4_MulticastOption ()
3712 IPAddress mcast_addr = IPAddress.Parse ("239.255.255.250");
3714 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp)) {
3715 s.Bind (new IPEndPoint (IPAddress.Any, 1901));
3716 s.SetSocketOption (SocketOptionLevel.IP, SocketOptionName.AddMembership,
3717 new MulticastOption (mcast_addr));
3721 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
3722 [Category ("NotWorking")]
3723 public void SetSocketOption3_AddMembershipIPv4_Socket_NotBound ()
3725 IPAddress mcast_addr = IPAddress.Parse ("239.255.255.250");
3727 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
3729 s.SetSocketOption (SocketOptionLevel.IP, SocketOptionName.AddMembership,
3730 new MulticastOption (mcast_addr));
3732 } catch (SocketException ex) {
3733 // An invalid argument was supplied
3734 Assert.AreEqual (typeof (SocketException), ex.GetType (), "#2");
3735 Assert.AreEqual (10022, ex.ErrorCode, "#3");
3736 Assert.IsNull (ex.InnerException, "#4");
3737 Assert.IsNotNull (ex.Message, "#5");
3738 Assert.AreEqual (10022, ex.NativeErrorCode, "#6");
3740 Assert.AreEqual (SocketError.InvalidArgument, ex.SocketErrorCode, "#7");
3747 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
3748 public void SetSocketOption3_AddMembershipIPv6_IPv6MulticastOption ()
3751 if (!Socket.OSSupportsIPv6)
3753 if (!Socket.SupportsIPv6)
3755 Assert.Ignore ("IPv6 not enabled.");
3757 IPAddress mcast_addr = IPAddress.Parse ("ff02::1");
3759 using (Socket s = new Socket (AddressFamily.InterNetworkV6, SocketType.Dgram, ProtocolType.Udp)) {
3760 s.Bind (new IPEndPoint (IPAddress.IPv6Any, 1902));
3761 s.SetSocketOption (SocketOptionLevel.IPv6, SocketOptionName.AddMembership,
3762 new IPv6MulticastOption (mcast_addr));
3766 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
3767 public void SetSocketOption3_AddMembershipIPv6_MulticastOption ()
3770 if (!Socket.OSSupportsIPv6)
3772 if (!Socket.SupportsIPv6)
3774 Assert.Ignore ("IPv6 not enabled.");
3776 IPAddress mcast_addr = IPAddress.Parse ("ff02::1");
3778 using (Socket s = new Socket (AddressFamily.InterNetworkV6, SocketType.Dgram, ProtocolType.Udp)) {
3779 s.Bind (new IPEndPoint (IPAddress.IPv6Any, 1902));
3781 s.SetSocketOption (SocketOptionLevel.IPv6, SocketOptionName.AddMembership,
3782 new MulticastOption (mcast_addr));
3784 } catch (ArgumentException ex) {
3785 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
3786 Assert.IsNull (ex.InnerException, "#3");
3787 Assert.IsNotNull (ex.Message, "#4");
3789 // The specified value is not a valid 'IPv6MulticastOption'
3790 Assert.IsTrue (ex.Message.IndexOf ("'IPv6MulticastOption'") != -1, "#5:" + ex.Message);
3791 Assert.AreEqual ("optionValue", ex.ParamName, "#6");
3793 Assert.AreEqual ("optionValue", ex.Message, "#5");
3794 Assert.IsNull (ex.ParamName, "#6");
3800 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
3801 [Category ("NotWorking")]
3802 public void SetSocketOption3_AddMembershipIPv6_Socket_NotBound ()
3804 IPAddress mcast_addr = IPAddress.Parse ("ff02::1");
3806 Socket s = new Socket (AddressFamily.InterNetworkV6, SocketType.Dgram, ProtocolType.Udp);
3808 s.SetSocketOption (SocketOptionLevel.IPv6, SocketOptionName.AddMembership,
3809 new IPv6MulticastOption (mcast_addr));
3811 } catch (SocketException ex) {
3812 // An invalid argument was supplied
3813 Assert.AreEqual (typeof (SocketException), ex.GetType (), "#2");
3814 Assert.AreEqual (10022, ex.ErrorCode, "#3");
3815 Assert.IsNull (ex.InnerException, "#4");
3816 Assert.IsNotNull (ex.Message, "#5");
3817 Assert.AreEqual (10022, ex.NativeErrorCode, "#6");
3819 Assert.AreEqual (SocketError.InvalidArgument, ex.SocketErrorCode, "#7");
3826 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
3827 public void SetSocketOption3_DontLinger_Boolean ()
3829 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
3831 s.SetSocketOption (SocketOptionLevel.Socket,
3832 SocketOptionName.DontLinger, (object) false);
3834 } catch (ArgumentException ex) {
3835 // The specified value is not valid
3836 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
3837 Assert.IsNull (ex.InnerException, "#3");
3839 Assert.IsNotNull (ex.Message, "#4");
3840 Assert.AreEqual ("optionValue", ex.ParamName, "#5");
3842 Assert.AreEqual ("optionValue", ex.Message, "#4");
3843 Assert.IsNull (ex.ParamName, "#5");
3849 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
3850 public void SetSocketOption3_DontLinger_Int32 ()
3852 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
3854 s.SetSocketOption (SocketOptionLevel.Socket,
3855 SocketOptionName.DontLinger, (object) 0);
3857 } catch (ArgumentException ex) {
3858 // The specified value is not valid
3859 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
3860 Assert.IsNull (ex.InnerException, "#3");
3862 Assert.IsNotNull (ex.Message, "#4");
3863 Assert.AreEqual ("optionValue", ex.ParamName, "#5");
3865 Assert.AreEqual ("optionValue", ex.Message, "#4");
3866 Assert.IsNull (ex.ParamName, "#5");
3872 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
3873 public void SetSocketOption3_DontLinger_LingerOption ()
3875 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
3877 s.SetSocketOption (SocketOptionLevel.Socket,
3878 SocketOptionName.DontLinger, new LingerOption (true, 1000));
3880 } catch (ArgumentException ex) {
3881 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
3882 Assert.IsNull (ex.InnerException, "#3");
3884 // The specified value is not valid
3885 Assert.IsNotNull (ex.Message, "#4");
3886 Assert.AreEqual ("optionValue", ex.ParamName, "#5");
3888 Assert.AreEqual ("optionValue", ex.Message, "#4");
3889 Assert.IsNull (ex.ParamName, "#5");
3895 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
3896 public void SetSocketOption3_Linger_Boolean ()
3898 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
3900 s.SetSocketOption (SocketOptionLevel.Socket,
3901 SocketOptionName.Linger, (object) false);
3903 } catch (ArgumentException ex) {
3904 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
3905 Assert.IsNull (ex.InnerException, "#3");
3907 // The specified value is not valid
3908 Assert.IsNotNull (ex.Message, "#4");
3909 Assert.AreEqual ("optionValue", ex.ParamName, "#5");
3911 Assert.AreEqual ("optionValue", ex.Message, "#4");
3912 Assert.IsNull (ex.ParamName, "#5");
3918 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
3919 public void SetSocketOption3_Linger_Int32 ()
3921 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
3923 s.SetSocketOption (SocketOptionLevel.Socket,
3924 SocketOptionName.Linger, (object) 0);
3926 } catch (ArgumentException ex) {
3927 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
3928 Assert.IsNull (ex.InnerException, "#3");
3930 // The specified value is not valid
3931 Assert.IsNotNull (ex.Message, "#4");
3932 Assert.AreEqual ("optionValue", ex.ParamName, "#5");
3934 Assert.AreEqual ("optionValue", ex.Message, "#4");
3935 Assert.IsNull (ex.ParamName, "#5");
3941 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
3942 public void SetSocketOption3_Linger_LingerOption ()
3944 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
3945 s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.Linger,
3946 new LingerOption (false, 0));
3947 s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.Linger,
3948 new LingerOption (true, 0));
3949 s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.Linger,
3950 new LingerOption (false, 1000));
3951 s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.Linger,
3952 new LingerOption (true, 1000));
3956 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
3957 public void SetSocketOption3_DropMembershipIPv4_IPv6MulticastOption ()
3959 IPAddress mcast_addr = IPAddress.Parse ("239.255.255.250");
3961 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp)) {
3962 s.Bind (new IPEndPoint (IPAddress.Any, 1901));
3963 s.SetSocketOption (SocketOptionLevel.IP, SocketOptionName.AddMembership,
3964 new MulticastOption (mcast_addr));
3966 s.SetSocketOption (SocketOptionLevel.IP, SocketOptionName.DropMembership,
3967 new IPv6MulticastOption (mcast_addr));
3969 } catch (ArgumentException ex) {
3970 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
3971 Assert.IsNull (ex.InnerException, "#3");
3972 Assert.IsNotNull (ex.Message, "#4");
3974 // The specified value is not a valid 'MulticastOption'
3975 Assert.IsTrue (ex.Message.IndexOf ("'MulticastOption'") != -1, "#5:" + ex.Message);
3976 Assert.AreEqual ("optionValue", ex.ParamName, "#6");
3978 Assert.AreEqual ("optionValue", ex.Message, "#5");
3979 Assert.IsNull (ex.ParamName, "#6");
3985 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
3986 public void SetSocketOption3_DropMembershipIPv4_MulticastOption ()
3988 IPAddress mcast_addr = IPAddress.Parse ("239.255.255.250");
3990 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp)) {
3991 MulticastOption option = new MulticastOption (mcast_addr);
3993 s.Bind (new IPEndPoint (IPAddress.Any, 1901));
3994 s.SetSocketOption (SocketOptionLevel.IP, SocketOptionName.AddMembership,
3996 s.SetSocketOption (SocketOptionLevel.IP, SocketOptionName.DropMembership,
4001 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
4002 [Category ("NotWorking")]
4003 public void SetSocketOption3_DropMembershipIPv4_Socket_NotBound ()
4005 IPAddress mcast_addr = IPAddress.Parse ("239.255.255.250");
4007 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
4009 s.SetSocketOption (SocketOptionLevel.IP, SocketOptionName.DropMembership,
4010 new MulticastOption (mcast_addr));
4012 } catch (SocketException ex) {
4013 // An invalid argument was supplied
4014 Assert.AreEqual (typeof (SocketException), ex.GetType (), "#2");
4015 Assert.AreEqual (10022, ex.ErrorCode, "#3");
4016 Assert.IsNull (ex.InnerException, "#4");
4017 Assert.IsNotNull (ex.Message, "#5");
4018 Assert.AreEqual (10022, ex.NativeErrorCode, "#6");
4020 Assert.AreEqual (SocketError.InvalidArgument, ex.SocketErrorCode, "#7");
4027 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
4028 public void SetSocketOption3_DropMembershipIPv6_IPv6MulticastOption ()
4031 if (!Socket.OSSupportsIPv6)
4033 if (!Socket.SupportsIPv6)
4035 Assert.Ignore ("IPv6 not enabled.");
4037 using (Socket s = new Socket (AddressFamily.InterNetworkV6, SocketType.Dgram, ProtocolType.Udp)) {
4038 IPv6MulticastOption option = new IPv6MulticastOption (
4039 IPAddress.Parse ("ff02::1"));
4041 s.Bind (new IPEndPoint (IPAddress.IPv6Any, 1902));
4042 s.SetSocketOption (SocketOptionLevel.IPv6, SocketOptionName.AddMembership,
4044 s.SetSocketOption (SocketOptionLevel.IPv6, SocketOptionName.DropMembership,
4049 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
4050 public void SetSocketOption3_DropMembershipIPv6_MulticastOption ()
4053 if (!Socket.OSSupportsIPv6)
4055 if (!Socket.SupportsIPv6)
4057 Assert.Ignore ("IPv6 not enabled.");
4059 IPAddress mcast_addr = IPAddress.Parse ("ff02::1");
4061 using (Socket s = new Socket (AddressFamily.InterNetworkV6, SocketType.Dgram, ProtocolType.Udp)) {
4062 s.Bind (new IPEndPoint (IPAddress.IPv6Any, 1902));
4063 s.SetSocketOption (SocketOptionLevel.IPv6, SocketOptionName.AddMembership,
4064 new IPv6MulticastOption (mcast_addr));
4066 s.SetSocketOption (SocketOptionLevel.IPv6, SocketOptionName.DropMembership,
4067 new MulticastOption (mcast_addr));
4069 } catch (ArgumentException ex) {
4070 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
4071 Assert.IsNull (ex.InnerException, "#3");
4072 Assert.IsNotNull (ex.Message, "#4");
4074 // The specified value is not a valid 'IPv6MulticastOption'
4075 Assert.IsTrue (ex.Message.IndexOf ("'IPv6MulticastOption'") != -1, "#5:" + ex.Message);
4076 Assert.AreEqual ("optionValue", ex.ParamName, "#6");
4078 Assert.AreEqual ("optionValue", ex.Message, "#5");
4079 Assert.IsNull (ex.ParamName, "#6");
4085 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
4086 [Category ("NotWorking")]
4087 public void SetSocketOption3_DropMembershipIPv6_Socket_NotBound ()
4089 IPAddress mcast_addr = IPAddress.Parse ("ff02::1");
4091 Socket s = new Socket (AddressFamily.InterNetworkV6, SocketType.Dgram, ProtocolType.Udp);
4093 s.SetSocketOption (SocketOptionLevel.IPv6, SocketOptionName.DropMembership,
4094 new IPv6MulticastOption (mcast_addr));
4096 } catch (SocketException ex) {
4097 // An invalid argument was supplied
4098 Assert.AreEqual (typeof (SocketException), ex.GetType (), "#2");
4099 Assert.AreEqual (10022, ex.ErrorCode, "#3");
4100 Assert.IsNull (ex.InnerException, "#4");
4101 Assert.IsNotNull (ex.Message, "#5");
4102 Assert.AreEqual (10022, ex.NativeErrorCode, "#6");
4104 Assert.AreEqual (SocketError.InvalidArgument, ex.SocketErrorCode, "#7");
4111 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
4112 public void SetSocketOption3_OptionValue_Null ()
4114 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
4116 s.SetSocketOption (SocketOptionLevel.Socket,
4117 SocketOptionName.Linger, (object) null);
4119 } catch (ArgumentNullException ex) {
4120 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
4121 Assert.IsNull (ex.InnerException, "#3");
4122 Assert.IsNotNull (ex.Message, "#4");
4123 Assert.AreEqual ("optionValue", ex.ParamName, "#5");
4128 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
4129 public void SetSocketOption3_Socket_Closed ()
4131 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
4134 s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.Linger,
4135 new LingerOption (false, 0));
4137 } catch (ObjectDisposedException ex) {
4138 // Cannot access a disposed object
4139 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
4140 Assert.IsNull (ex.InnerException, "#3");
4141 Assert.IsNotNull (ex.Message, "#4");
4142 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
4147 public void SetSocketOption_MulticastInterfaceIndex_Any ()
4149 IPAddress ip = IPAddress.Parse ("239.255.255.250");
4151 using (Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp))
4153 s.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.MulticastInterface, IPAddress.HostToNetworkOrder(index));
4154 s.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership, new MulticastOption(ip, index));
4159 public void SetSocketOption_MulticastInterfaceIndex_Loopback ()
4161 IPAddress ip = IPAddress.Parse ("239.255.255.250");
4163 using (Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp))
4165 s.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.MulticastInterface, IPAddress.HostToNetworkOrder(index));
4166 s.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership, new MulticastOption(ip, index));
4171 public void SetSocketOption_MulticastInterfaceIndex_Invalid ()
4173 IPAddress ip = IPAddress.Parse ("239.255.255.250");
4175 using (Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp))
4179 s.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.MulticastInterface, IPAddress.HostToNetworkOrder(index));
4186 s.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership, new MulticastOption(ip, index));
4195 public void Shutdown_NoConnect ()
4197 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
4198 s.Bind (new IPEndPoint (IPAddress.Loopback, 0));
4201 s.Shutdown (SocketShutdown.Both);
4203 } catch (SocketException exc) {
4204 Assert.AreEqual (10057, exc.ErrorCode, "#2");
4211 [ExpectedException (typeof (NullReferenceException))]
4212 public void ReceiveAsync_Null ()
4214 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
4215 s.ReceiveAsync (null);
4220 [ExpectedException (typeof (NullReferenceException))]
4221 public void ReceiveAsync_Default ()
4223 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
4224 SocketAsyncEventArgs saea = new SocketAsyncEventArgs ();
4225 s.ReceiveAsync (saea);
4231 [ExpectedException (typeof (NullReferenceException))]
4232 public void ReceiveAsync_NullBuffer ()
4234 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
4235 SocketAsyncEventArgs saea = new SocketAsyncEventArgs ();
4236 saea.SetBuffer (null, 0, 0);
4237 s.ReceiveAsync (null);
4242 [ExpectedException (typeof (ObjectDisposedException))]
4243 public void ReceiveAsync_ClosedSocket ()
4245 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
4247 s.ReceiveAsync (null);
4251 [ExpectedException (typeof (NullReferenceException))]
4252 public void SendAsync_Null ()
4254 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
4260 [ExpectedException (typeof (NullReferenceException))]
4261 public void SendAsync_Default ()
4263 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
4264 SocketAsyncEventArgs saea = new SocketAsyncEventArgs ();
4271 [ExpectedException (typeof (NullReferenceException))]
4272 public void SendAsync_NullBuffer ()
4274 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
4275 SocketAsyncEventArgs saea = new SocketAsyncEventArgs ();
4276 saea.SetBuffer (null, 0, 0);
4282 [ExpectedException (typeof (ObjectDisposedException))]
4283 public void SendAsync_ClosedSocket ()
4285 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
4291 public void SendAsyncFile ()
4293 Socket serverSocket = StartSocketServer ();
4295 Socket clientSocket = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
4296 clientSocket.Connect (serverSocket.LocalEndPoint);
4297 clientSocket.NoDelay = true;
4299 // Initialize buffer used to create testing file
4300 var buffer = new byte [1024];
4301 for (int i = 0; i < 1024; ++i)
4302 buffer [i] = (byte) (i % 256);
4304 string temp = Path.GetTempFileName ();
4306 // Testing file creation
4307 using (StreamWriter sw = new StreamWriter (temp)) {
4311 var m = new ManualResetEvent (false);
4313 // Async Send File to server
4314 clientSocket.BeginSendFile(temp, (ar) => {
4315 Socket client = (Socket) ar.AsyncState;
4316 client.EndSendFile (ar);
4320 if (!m.WaitOne (1500))
4321 throw new TimeoutException ();
4324 if (File.Exists (temp))
4327 clientSocket.Close ();
4328 serverSocket.Close ();
4332 Socket StartSocketServer ()
4335 Socket listenSocket = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
4337 listenSocket.Bind (new IPEndPoint (IPAddress.Loopback, 8001));
4338 listenSocket.Listen (1);
4340 listenSocket.BeginAccept (new AsyncCallback (ReceiveCallback), listenSocket);
4342 return listenSocket;
4345 public static void ReceiveCallback (IAsyncResult AsyncCall)
4347 byte[] bytes = new byte [1024];
4349 Socket listener = (Socket)AsyncCall.AsyncState;
4350 Socket client = listener.EndAccept (AsyncCall);
4352 client.Receive (bytes, bytes.Length, 0);