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;
19 using System.Collections.Generic;
21 namespace MonoTests.System.Net.Sockets
24 public class SocketTest
26 // note: also used in SocketCas tests
27 public const string BogusAddress = "192.168.244.244";
28 public const int BogusPort = 23483;
31 public void ConnectIPAddressAny ()
33 IPEndPoint ep = new IPEndPoint (IPAddress.Any, 0);
35 /* UDP sockets use Any to disconnect
37 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp)) {
42 } catch (SocketException ex) {
43 Assert.AreEqual (10049, ex.ErrorCode, "#2");
48 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
53 } catch (SocketException ex) {
54 Assert.AreEqual (10049, ex.ErrorCode, "#4");
59 [Ignore ("Bug #75158")] // Looks like MS fails after the .ctor, when you try to use the socket
60 public void IncompatibleAddress ()
62 IPEndPoint epIPv6 = new IPEndPoint (IPAddress.IPv6Any,
66 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP)) {
71 } catch (SocketException ex) {
72 // address incompatible with protocol
73 int expectedError = 10047;
74 Assert.AreEqual (expectedError, ex.ErrorCode,
80 [Category ("InetAccess")]
81 public void BogusEndConnect ()
83 IPAddress ipOne = IPAddress.Parse (BogusAddress);
84 IPEndPoint ipEP = new IPEndPoint (ipOne, BogusPort);
85 Socket sock = new Socket (ipEP.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
86 IAsyncResult ar = sock.BeginConnect (ipEP, null, null);
89 // should raise an exception because connect was bogus
92 } catch (SocketException ex) {
93 // Actual error code depends on network configuration.
94 var error = (SocketError) ex.ErrorCode;
95 Assert.That (error == SocketError.TimedOut ||
96 error == SocketError.ConnectionRefused ||
97 error == SocketError.NetworkUnreachable ||
98 error == SocketError.HostUnreachable, "#2");
103 [ExpectedException (typeof (ArgumentNullException))]
104 public void SelectEmpty ()
106 ArrayList list = new ArrayList ();
107 Socket.Select (list, list, list, 1000);
110 private bool BlockingConnect (bool block)
112 IPEndPoint ep = new IPEndPoint(IPAddress.Loopback, 1234);
113 Socket server = new Socket(AddressFamily.InterNetwork,
117 server.Blocking=block;
121 Socket conn = new Socket (AddressFamily.InterNetwork,
126 Socket client = server.Accept();
127 bool client_block = client.Blocking;
133 return(client_block);
137 public void AcceptBlockingStatus()
141 block = BlockingConnect(true);
142 Assert.AreEqual (block, true, "BlockingStatus01");
144 block = BlockingConnect(false);
145 Assert.AreEqual (block, false, "BlockingStatus02");
148 static bool CFAConnected = false;
149 static ManualResetEvent CFACalledBack;
151 private static void CFACallback (IAsyncResult asyncResult)
153 Socket sock = (Socket)asyncResult.AsyncState;
154 CFAConnected = sock.Connected;
156 if (sock.Connected) {
157 sock.EndConnect (asyncResult);
160 CFACalledBack.Set ();
163 [Test] // Connect (IPEndPoint)
164 public void Connect1_RemoteEP_Null ()
166 Socket s = new Socket (AddressFamily.InterNetwork,
167 SocketType.Stream, ProtocolType.Tcp);
169 s.Connect ((IPEndPoint) null);
171 } catch (ArgumentNullException ex) {
172 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
173 Assert.IsNull (ex.InnerException, "#3");
174 Assert.IsNotNull (ex.Message, "#4");
175 Assert.AreEqual ("remoteEP", ex.ParamName, "#5");
180 public void ConnectFailAsync ()
182 Socket sock = new Socket (AddressFamily.InterNetwork,
185 sock.Blocking = false;
186 CFACalledBack = new ManualResetEvent (false);
187 CFACalledBack.Reset ();
189 /* Need a port that is not being used for
192 sock.BeginConnect (new IPEndPoint (IPAddress.Loopback,
194 new AsyncCallback (CFACallback),
196 CFACalledBack.WaitOne ();
198 Assert.AreEqual (CFAConnected, false, "ConnectFail");
202 public void SetSocketOptionBoolean ()
204 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 1);
205 Socket sock = new Socket (ep.Address.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
207 sock.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.KeepAlive, true);
213 public void TestSelect1 ()
215 Socket srv = CreateServer ();
216 ClientSocket clnt = new ClientSocket (srv.LocalEndPoint);
217 Thread th = new Thread (new ThreadStart (clnt.ConnectSleepClose));
223 ArrayList list = new ArrayList ();
224 ArrayList empty = new ArrayList ();
226 Socket.Select (list, empty, empty, 100);
227 Assert.AreEqual (0, empty.Count, "#01");
228 Assert.AreEqual (1, list.Count, "#02");
229 Socket.Select (empty, list, empty, 100);
230 Assert.AreEqual (0, empty.Count, "#03");
231 Assert.AreEqual (1, list.Count, "#04");
232 Socket.Select (list, empty, empty, -1);
233 Assert.AreEqual (0, empty.Count, "#05");
234 Assert.AreEqual (1, list.Count, "#06");
235 // Need to read the 10 bytes from the client to avoid a RST
236 byte [] bytes = new byte [10];
245 static Socket CreateServer ()
247 Socket sock = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
248 sock.Bind (new IPEndPoint (IPAddress.Loopback, 0));
257 public ClientSocket (EndPoint ep)
260 sock = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
263 public void ConnectSleepClose ()
272 byte [] b = new byte [10];
277 byte[] buf = new byte[100];
280 [ExpectedException (typeof (ObjectDisposedException))]
281 public void Disposed2 ()
283 Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
290 [ExpectedException (typeof (ObjectDisposedException))]
291 public void Disposed6 ()
293 Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
300 [ExpectedException (typeof (ObjectDisposedException))]
301 public void Disposed7 ()
303 Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
310 [ExpectedException (typeof (ObjectDisposedException))]
311 public void Disposed15 ()
313 Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
320 [ExpectedException (typeof (ObjectDisposedException))]
321 public void Disposed16 ()
323 Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
330 [ExpectedException (typeof (ObjectDisposedException))]
331 public void Disposed17 ()
333 Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
340 [ExpectedException (typeof (ObjectDisposedException))]
341 public void Disposed18 ()
343 Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
346 s.Send (buf, 0, 10, 0);
350 [ExpectedException (typeof (ObjectDisposedException))]
351 public void Disposed19 ()
353 Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
354 EndPoint ep = new IPEndPoint (IPAddress.Any, 31337);
357 s.SendTo (buf, 0, ep);
361 [ExpectedException (typeof (ObjectDisposedException))]
362 public void Disposed20 ()
364 Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
365 EndPoint ep = new IPEndPoint (IPAddress.Any, 31337);
368 s.SendTo (buf, 10, 0, ep);
372 [ExpectedException (typeof (ObjectDisposedException))]
373 public void Disposed21 ()
375 Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
376 EndPoint ep = new IPEndPoint (IPAddress.Any, 31337);
379 s.SendTo (buf, 0, 10, 0, ep);
383 [ExpectedException (typeof (ObjectDisposedException))]
384 public void Disposed22 ()
386 Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
387 EndPoint ep = new IPEndPoint (IPAddress.Any, 31337);
394 [ExpectedException (typeof (ObjectDisposedException))]
395 public void Disposed23 ()
397 Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
404 public void GetHashCodeTest ()
406 Socket server = new Socket (AddressFamily.InterNetwork,
407 SocketType.Stream, ProtocolType.Tcp);
408 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
413 Socket client = new Socket (AddressFamily.InterNetwork,
414 SocketType.Stream, ProtocolType.Tcp);
415 int hashcodeA = client.GetHashCode ();
417 int hashcodeB = client.GetHashCode ();
418 Assert.AreEqual (hashcodeA, hashcodeB, "#1");
420 int hashcodeC = client.GetHashCode ();
421 Assert.AreEqual (hashcodeB, hashcodeC, "#2");
425 static ManualResetEvent SocketError_event = new ManualResetEvent (false);
427 private static void SocketError_callback (IAsyncResult ar)
429 Socket sock = (Socket)ar.AsyncState;
432 sock.EndConnect (ar);
435 SocketError_event.Set ();
439 public void SocketErrorTest ()
441 Socket sock = new Socket (AddressFamily.InterNetwork,
444 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
447 SocketError_event.Reset ();
449 sock.Blocking = false;
450 sock.BeginConnect (ep, new AsyncCallback(SocketError_callback),
453 if (SocketError_event.WaitOne (2000, false) == false) {
454 Assert.Fail ("SocketError wait timed out");
457 Assert.AreEqual (false, sock.Connected, "SocketError #1");
461 error = (int)sock.GetSocketOption (SocketOptionLevel.Socket, SocketOptionName.Error);
462 Assert.AreEqual (10061, error, "SocketError #2");
464 error = (int)sock.GetSocketOption (SocketOptionLevel.Socket, SocketOptionName.Error);
465 Assert.AreEqual (10061, error, "SocketError #3");
472 public void SocketInformationCtor ()
477 public void DontFragmentDefaultTcp ()
479 Socket sock = new Socket (AddressFamily.InterNetwork,
483 Assert.AreEqual (false, sock.DontFragment, "DontFragmentDefaultTcp");
489 [Category ("NotWorking")] // DontFragment doesn't work
490 public void DontFragmentChangeTcp ()
492 Socket sock = new Socket (AddressFamily.InterNetwork,
496 sock.DontFragment = true;
498 Assert.AreEqual (true, sock.DontFragment, "DontFragmentChangeTcp");
504 public void DontFragmentDefaultUdp ()
506 Socket sock = new Socket (AddressFamily.InterNetwork,
510 Assert.AreEqual (false, sock.DontFragment, "DontFragmentDefaultUdp");
516 [Category ("NotWorking")] // DontFragment doesn't work
517 public void DontFragmentChangeUdp ()
519 Socket sock = new Socket (AddressFamily.InterNetwork,
523 sock.DontFragment = true;
525 Assert.AreEqual (true, sock.DontFragment, "DontFragmentChangeUdp");
531 [ExpectedException (typeof(ObjectDisposedException))]
532 public void DontFragmentClosed ()
534 Socket sock = new Socket (AddressFamily.InterNetwork,
540 bool val = sock.DontFragment;
544 [Category ("NotWorking")] // Need to pick a non-IP AddressFamily that "works" on both mono and ms, this one only works on ms
545 public void DontFragment ()
547 Socket sock = new Socket (AddressFamily.NetBios,
548 SocketType.Seqpacket,
549 ProtocolType.Unspecified);
552 sock.DontFragment = true;
553 Assert.Fail ("DontFragment #1");
554 } catch (NotSupportedException) {
556 Assert.Fail ("DontFragment #2");
563 public void EnableBroadcastDefaultTcp ()
565 Socket sock = new Socket (AddressFamily.InterNetwork,
570 bool value = sock.EnableBroadcast;
571 Assert.Fail ("EnableBroadcastDefaultTcp #1");
572 } catch (SocketException ex) {
573 Assert.AreEqual (10042, ex.ErrorCode, "EnableBroadcastDefaultTcp #2");
575 Assert.Fail ("EnableBroadcastDefaultTcp #2");
582 public void EnableBroadcastDefaultUdp ()
584 Socket sock = new Socket (AddressFamily.InterNetwork,
588 Assert.AreEqual (false, sock.EnableBroadcast, "EnableBroadcastDefaultUdp");
594 public void EnableBroadcastChangeTcp ()
596 Socket sock = new Socket (AddressFamily.InterNetwork,
601 sock.EnableBroadcast = true;
602 Assert.Fail ("EnableBroadcastChangeTcp #1");
603 } catch (SocketException ex) {
604 Assert.AreEqual (10042, ex.ErrorCode, "EnableBroadcastChangeTcp #2");
606 Assert.Fail ("EnableBroadcastChangeTcp #2");
613 public void EnableBroadcastChangeUdp ()
615 Socket sock = new Socket (AddressFamily.InterNetwork,
619 sock.EnableBroadcast = true;
621 Assert.AreEqual (true, sock.EnableBroadcast, "EnableBroadcastChangeUdp");
627 [ExpectedException (typeof(ObjectDisposedException))]
628 public void EnableBroadcastClosed ()
630 Socket sock = new Socket (AddressFamily.InterNetwork,
636 bool val = sock.EnableBroadcast;
639 /* Can't test the default for ExclusiveAddressUse as
640 * it's different on different versions and service
644 [Category ("NotWorking")] // Not supported on Linux
645 public void ExclusiveAddressUseUnbound ()
647 Socket sock = new Socket (AddressFamily.InterNetwork,
651 sock.ExclusiveAddressUse = true;
653 Assert.AreEqual (true, sock.ExclusiveAddressUse, "ExclusiveAddressUseUnbound");
659 [ExpectedException (typeof(InvalidOperationException))]
660 [Category ("NotWorking")] // Not supported on Linux
661 public void ExclusiveAddressUseBound ()
663 Socket sock = new Socket (AddressFamily.InterNetwork,
667 sock.Bind (new IPEndPoint (IPAddress.Any, 1235));
668 sock.ExclusiveAddressUse = true;
673 [ExpectedException (typeof(ObjectDisposedException))]
674 public void ExclusiveAddressUseClosed ()
676 Socket sock = new Socket (AddressFamily.InterNetwork,
682 bool val = sock.ExclusiveAddressUse;
686 public void IsBoundTcp ()
688 Socket sock = new Socket (AddressFamily.InterNetwork,
691 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
694 Assert.AreEqual (false, sock.IsBound, "IsBoundTcp #1");
697 Assert.AreEqual (true, sock.IsBound, "IsBoundTcp #2");
701 Socket sock2 = new Socket (AddressFamily.InterNetwork,
705 Assert.AreEqual (false, sock2.IsBound, "IsBoundTcp #3");
708 Assert.AreEqual (true, sock2.IsBound, "IsBoundTcp #4");
711 Assert.AreEqual (true, sock2.IsBound, "IsBoundTcp #5");
714 Assert.AreEqual (true, sock.IsBound, "IsBoundTcp #6");
718 public void IsBoundUdp ()
720 Socket sock = new Socket (AddressFamily.InterNetwork,
723 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
726 Assert.AreEqual (false, sock.IsBound, "IsBoundUdp #1");
729 Assert.AreEqual (true, sock.IsBound, "IsBoundUdp #2");
732 Assert.AreEqual (true, sock.IsBound, "IsBoundUdp #3");
735 sock = new Socket (AddressFamily.InterNetwork,
739 Assert.AreEqual (false, sock.IsBound, "IsBoundUdp #4");
742 Assert.AreEqual (true, sock.IsBound, "IsBoundUdp #5");
745 Assert.AreEqual (true, sock.IsBound, "IsBoundUdp #6");
749 /* Should not throw an exception */
750 public void IsBoundClosed ()
752 Socket sock = new Socket (AddressFamily.InterNetwork,
758 bool val = sock.IsBound;
761 /* Nothing much to test for LingerState */
764 public void MulticastLoopbackDefaultTcp ()
766 Socket sock = new Socket (AddressFamily.InterNetwork,
771 bool value = sock.MulticastLoopback;
772 Assert.Fail ("MulticastLoopbackDefaultTcp #1");
773 } catch (SocketException ex) {
774 Assert.AreEqual (10042, ex.ErrorCode, "MulticastLoopbackDefaultTcp #2");
776 Assert.Fail ("MulticastLoopbackDefaultTcp #2");
783 public void MulticastLoopbackChangeTcp ()
785 Socket sock = new Socket (AddressFamily.InterNetwork,
790 sock.MulticastLoopback = false;
791 Assert.Fail ("MulticastLoopbackChangeTcp #1");
792 } catch (SocketException ex) {
793 Assert.AreEqual (10042, ex.ErrorCode, "MulticastLoopbackChangeTcp #2");
795 Assert.Fail ("MulticastLoopbackChangeTcp #2");
802 public void MulticastLoopbackDefaultUdp ()
804 Socket sock = new Socket (AddressFamily.InterNetwork,
808 Assert.AreEqual (true, sock.MulticastLoopback, "MulticastLoopbackDefaultUdp");
814 public void MulticastLoopbackChangeUdp ()
816 Socket sock = new Socket (AddressFamily.InterNetwork,
820 sock.MulticastLoopback = false;
822 Assert.AreEqual (false, sock.MulticastLoopback, "MulticastLoopbackChangeUdp");
828 [ExpectedException (typeof(ObjectDisposedException))]
829 public void MulticastLoopbackClosed ()
831 Socket sock = new Socket (AddressFamily.InterNetwork,
837 bool val = sock.MulticastLoopback;
840 /* OSSupportsIPv6 depends on the environment */
843 [Category("NotWorking")] // We have different defaults for perf reasons
844 public void ReceiveBufferSizeDefault ()
846 Socket sock = new Socket (AddressFamily.InterNetwork,
850 Assert.AreEqual (8192, sock.ReceiveBufferSize, "ReceiveBufferSizeDefault");
856 [Category("NotWorking")] // We have different defaults for perf reasons
857 public void ReceiveBufferSizeDefaultUdp ()
859 Socket sock = new Socket (AddressFamily.InterNetwork,
863 Assert.AreEqual (8192, sock.ReceiveBufferSize, "ReceiveBufferSizeDefaultUdp");
869 public void ReceiveBufferSizeChange ()
871 Socket sock = new Socket (AddressFamily.InterNetwork,
875 sock.ReceiveBufferSize = 16384;
877 Assert.AreEqual (16384, sock.ReceiveBufferSize, "ReceiveBufferSizeChange");
883 [Category("NotWorking")] // We cannot totally remove buffers (minimum is set to 256
884 public void BuffersCheck_None ()
886 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
887 int original = s.ReceiveBufferSize;
888 s.ReceiveBufferSize = 0;
889 Assert.AreEqual (0, s.ReceiveBufferSize, "ReceiveBufferSize " + original.ToString ());
891 original = s.SendBufferSize;
892 s.SendBufferSize = 0;
893 Assert.AreEqual (0, s.SendBufferSize, "SendBufferSize " + original.ToString ());
898 [ExpectedException (typeof(ObjectDisposedException))]
899 public void ReceiveBufferSizeClosed ()
901 Socket sock = new Socket (AddressFamily.InterNetwork,
907 int val = sock.ReceiveBufferSize;
911 [Category("NotWorking")] // We have different defaults for perf reasons
912 public void SendBufferSizeDefault ()
914 Socket sock = new Socket (AddressFamily.InterNetwork,
918 Assert.AreEqual (8192, sock.SendBufferSize, "SendBufferSizeDefault");
924 [Category("NotWorking")] // We have different defaults for perf reasons
925 public void SendBufferSizeDefaultUdp ()
927 Socket sock = new Socket (AddressFamily.InterNetwork,
931 Assert.AreEqual (8192, sock.SendBufferSize, "SendBufferSizeDefaultUdp");
937 public void SendBufferSizeChange ()
939 Socket sock = new Socket (AddressFamily.InterNetwork,
943 sock.SendBufferSize = 16384;
945 Assert.AreEqual (16384, sock.SendBufferSize, "SendBufferSizeChange");
951 [ExpectedException (typeof(ObjectDisposedException))]
952 public void SendBufferSizeClosed ()
954 Socket sock = new Socket (AddressFamily.InterNetwork,
960 int val = sock.SendBufferSize;
963 /* No test for TTL default as it's platform dependent */
965 public void TtlChange ()
967 Socket sock = new Socket (AddressFamily.InterNetwork,
973 Assert.AreEqual (255, sock.Ttl, "TtlChange");
979 [Category ("NotOnMac")] // Mac doesn't throw when overflowing the ttl
980 public void TtlChangeOverflow ()
982 Socket sock = new Socket (AddressFamily.InterNetwork,
988 Assert.Fail ("TtlChangeOverflow #1");
989 } catch (SocketException ex) {
990 Assert.AreEqual (10022, ex.ErrorCode,
991 "TtlChangeOverflow #2");
993 Assert.Fail ("TtlChangeoverflow #3");
999 /* Apparently you can set TTL=0 on the ms runtime!!
1002 Assert.Fail ("TtlChangeOverflow #4");
1003 } catch (SocketException ex) {
1004 Assert.AreEqual (10022, ex.ErrorCode,
1005 "TtlChangeOverflow #5");
1007 Assert.Fail ("TtlChangeOverflow #6");
1014 [ExpectedException (typeof(ObjectDisposedException))]
1015 public void TtlClosed ()
1017 Socket sock = new Socket (AddressFamily.InterNetwork,
1027 public void UseOnlyOverlappedIODefault ()
1029 Socket sock = new Socket (AddressFamily.InterNetwork,
1033 Assert.AreEqual (false, sock.UseOnlyOverlappedIO, "UseOnlyOverlappedIODefault");
1039 // We need this because the Linux kernel in certain configurations
1040 // will end up rounding up the values passed on to the kernel
1041 // for socket send/receive timeouts.
1043 int Approximate (int target, int value)
1047 if (value > target-10 && value < target+10)
1053 public void UseOnlyOverlappedIOChange ()
1055 Socket sock = new Socket (AddressFamily.InterNetwork,
1059 sock.UseOnlyOverlappedIO = true;
1061 Assert.AreEqual (true, sock.UseOnlyOverlappedIO, "UseOnlyOverlappedIOChange");
1067 /* Should not throw an exception */
1068 public void UseOnlyOverlappedIOClosed ()
1070 Socket sock = new Socket (AddressFamily.InterNetwork,
1076 bool val = sock.UseOnlyOverlappedIO;
1080 public void SendTimeoutDefault ()
1082 Socket sock = new Socket (AddressFamily.InterNetwork,
1086 Assert.AreEqual (0, sock.SendTimeout, "SendTimeoutDefault");
1092 public void SendTimeoutChange ()
1094 Socket sock = new Socket (AddressFamily.InterNetwork,
1098 /* Should be rounded up to 500, according to
1099 * the MSDN docs, but the MS runtime doesn't
1101 sock.SendTimeout = 50;
1102 Assert.AreEqual (50, Approximate (50, sock.SendTimeout), "SendTimeoutChange #1");
1104 sock.SendTimeout = 2000;
1105 Assert.AreEqual (2000, Approximate (2000, sock.SendTimeout), "SendTimeoutChange #2");
1107 sock.SendTimeout = 0;
1108 Assert.AreEqual (0, Approximate (0, sock.SendTimeout), "SendTimeoutChange #3");
1110 /* Should be the same as setting 0 */
1111 sock.SendTimeout = -1;
1112 Assert.AreEqual (0, sock.SendTimeout, "SendTimeoutChange #4");
1114 sock.SendTimeout = 65536;
1115 Assert.AreEqual (65536, Approximate (65536, sock.SendTimeout), "SendTimeoutChange #5");
1118 sock.SendTimeout = -2;
1119 Assert.Fail ("SendTimeoutChange #8");
1120 } catch (ArgumentOutOfRangeException) {
1122 Assert.Fail ("SendTimeoutChange #9");
1129 [ExpectedException (typeof(ObjectDisposedException))]
1130 public void SendTimeoutClosed ()
1132 Socket sock = new Socket (AddressFamily.InterNetwork,
1138 int val = sock.SendTimeout;
1142 public void ReceiveTimeoutDefault ()
1144 Socket sock = new Socket (AddressFamily.InterNetwork,
1148 Assert.AreEqual (0, sock.ReceiveTimeout, "ReceiveTimeoutDefault");
1154 public void ReceiveTimeoutChange ()
1156 Socket sock = new Socket (AddressFamily.InterNetwork,
1160 sock.ReceiveTimeout = 50;
1161 Assert.AreEqual (50, Approximate (50, sock.ReceiveTimeout), "ReceiveTimeoutChange #1");
1163 sock.ReceiveTimeout = 2000;
1164 Assert.AreEqual (2000, Approximate (2000, sock.ReceiveTimeout), "ReceiveTimeoutChange #2");
1166 sock.ReceiveTimeout = 0;
1167 Assert.AreEqual (0, sock.ReceiveTimeout, "ReceiveTimeoutChange #3");
1169 /* Should be the same as setting 0 */
1170 sock.ReceiveTimeout = -1;
1171 Assert.AreEqual (0, sock.ReceiveTimeout, "ReceiveTimeoutChange #4");
1173 sock.ReceiveTimeout = 65536;
1174 Assert.AreEqual (65536, Approximate (65536, sock.ReceiveTimeout), "ReceiveTimeoutChange #5");
1177 sock.ReceiveTimeout = -2;
1178 Assert.Fail ("ReceiveTimeoutChange #8");
1179 } catch (ArgumentOutOfRangeException) {
1181 Assert.Fail ("ReceiveTimeoutChange #9");
1188 [ExpectedException (typeof(ObjectDisposedException))]
1189 public void ReceiveTimeoutClosed ()
1191 Socket sock = new Socket (AddressFamily.InterNetwork,
1197 int val = sock.ReceiveTimeout;
1201 public void NoDelayDefaultTcp ()
1203 Socket sock = new Socket (AddressFamily.InterNetwork,
1207 Assert.AreEqual (false, sock.NoDelay, "NoDelayDefaultTcp");
1213 public void NoDelayChangeTcp ()
1215 Socket sock = new Socket (AddressFamily.InterNetwork,
1219 sock.NoDelay = true;
1221 Assert.AreEqual (true, sock.NoDelay, "NoDelayChangeTcp");
1227 public void NoDelayDefaultUdp ()
1229 Socket sock = new Socket (AddressFamily.InterNetwork,
1234 bool val = sock.NoDelay;
1235 Assert.Fail ("NoDelayDefaultUdp #1");
1236 } catch (SocketException ex) {
1237 Assert.AreEqual (10042, ex.ErrorCode,
1238 "NoDelayDefaultUdp #2");
1240 Assert.Fail ("NoDelayDefaultUdp #3");
1247 public void NoDelayChangeUdp ()
1249 Socket sock = new Socket (AddressFamily.InterNetwork,
1254 sock.NoDelay = true;
1255 Assert.Fail ("NoDelayChangeUdp #1");
1256 } catch (SocketException ex) {
1257 Assert.AreEqual (10042, ex.ErrorCode,
1258 "NoDelayChangeUdp #2");
1260 Assert.Fail ("NoDelayChangeUdp #3");
1267 [ExpectedException (typeof(ObjectDisposedException))]
1268 public void NoDelayClosed ()
1270 Socket sock = new Socket (AddressFamily.InterNetwork,
1276 bool val = sock.NoDelay;
1279 static bool BAAccepted = false;
1280 static Socket BASocket = null;
1281 static ManualResetEvent BACalledBack = new ManualResetEvent (false);
1283 private static void BACallback (IAsyncResult asyncResult)
1285 Socket sock = (Socket)asyncResult.AsyncState;
1287 BASocket = sock.EndAccept (asyncResult);
1290 BACalledBack.Set ();
1294 [ExpectedException (typeof(InvalidOperationException))]
1295 public void BeginAcceptNotBound ()
1297 Socket sock = new Socket (AddressFamily.InterNetwork,
1301 sock.BeginAccept (BACallback, sock);
1307 [ExpectedException (typeof(InvalidOperationException))]
1308 public void BeginAcceptNotListening ()
1310 Socket sock = new Socket (AddressFamily.InterNetwork,
1314 sock.Bind (new IPEndPoint (IPAddress.Any, 1236));
1316 sock.BeginAccept (BACallback, sock);
1322 public void BeginAccept ()
1324 Socket sock = new Socket (AddressFamily.InterNetwork,
1327 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
1333 BACalledBack.Reset ();
1335 sock.BeginAccept (BACallback, sock);
1337 Socket conn = new Socket (AddressFamily.InterNetwork,
1343 if (BACalledBack.WaitOne (2000, false) == false) {
1344 Assert.Fail ("BeginAccept wait timed out");
1347 Assert.AreEqual (true, BAAccepted, "BeginAccept #1");
1348 Assert.AreEqual (true, BASocket.Connected, "BeginAccept #2");
1349 Assert.AreEqual (false, sock.Connected, "BeginAccept #3");
1350 Assert.AreEqual (true, conn.Connected, "BeginAccept #4");
1358 [ExpectedException (typeof(ObjectDisposedException))]
1359 public void BeginAcceptClosed ()
1361 Socket sock = new Socket (AddressFamily.InterNetwork,
1367 sock.BeginAccept (BACallback, sock);
1370 static bool BADAccepted = false;
1371 static Socket BADSocket = null;
1372 static byte[] BADBytes;
1373 static int BADByteCount;
1374 static ManualResetEvent BADCalledBack = new ManualResetEvent (false);
1376 private static void BADCallback (IAsyncResult asyncResult)
1378 Socket sock = (Socket)asyncResult.AsyncState;
1380 BADSocket = sock.EndAccept (out BADBytes,
1385 BADCalledBack.Set ();
1389 public void BeginAcceptData ()
1391 Socket sock = new Socket (AddressFamily.InterNetwork,
1394 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
1400 BADCalledBack.Reset ();
1402 sock.BeginAccept (256, BADCallback, sock);
1404 Socket conn = new Socket (AddressFamily.InterNetwork,
1407 byte[] send_bytes = new byte[] {10, 11, 12, 13};
1410 conn.Send (send_bytes);
1412 if (BADCalledBack.WaitOne (2000, false) == false) {
1413 Assert.Fail ("BeginAcceptData wait timed out");
1416 Assert.AreEqual (true, BADAccepted, "BeginAcceptData #1");
1417 Assert.AreEqual (true, BADSocket.Connected, "BeginAcceptData #2");
1418 Assert.AreEqual (false, sock.Connected, "BeginAcceptData #3");
1419 Assert.AreEqual (true, conn.Connected, "BeginAcceptData #4");
1420 Assert.AreEqual (send_bytes.Length, BADByteCount, "BeginAcceptData #5");
1422 /* The MS runtime gives the returned data in a
1423 * much bigger array. TODO: investigate
1424 * whether it the size correlates to the first
1425 * parameter in BeginAccept()
1427 Assert.IsFalse (BADBytes.Length == send_bytes.Length,
1428 "BeginAcceptData #6");
1430 for(int i = 0; i < send_bytes.Length; i++) {
1431 Assert.AreEqual (send_bytes[i], BADBytes[i], "BeginAcceptData #" + (i+7).ToString ());
1440 [ExpectedException (typeof(ObjectDisposedException))]
1441 public void BeginAcceptDataClosed ()
1443 Socket sock = new Socket (AddressFamily.InterNetwork,
1449 sock.BeginAccept (256, BADCallback, sock);
1453 public void BeginAcceptSocketUdp ()
1455 Socket sock = new Socket (AddressFamily.InterNetwork,
1458 Socket acc = new Socket (AddressFamily.InterNetwork,
1462 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
1469 sock.BeginAccept (acc, 256, BADCallback, sock);
1470 Assert.Fail ("BeginAcceptSocketUdp #1");
1471 } catch (SocketException ex) {
1472 Assert.AreEqual (10022, ex.ErrorCode, "BeginAcceptSocketUdp #2");
1474 Assert.Fail ("BeginAcceptSocketUdp #3");
1482 public void BeginAcceptSocketBound ()
1484 Socket sock = new Socket (AddressFamily.InterNetwork,
1487 Socket acc = new Socket (AddressFamily.InterNetwork,
1491 IPEndPoint ep1 = new IPEndPoint (IPAddress.Loopback,
1494 IPEndPoint ep2 = new IPEndPoint (IPAddress.Loopback,
1503 sock.BeginAccept (acc, 256, BADCallback, sock);
1504 Assert.Fail ("BeginAcceptSocketBound #1");
1505 } catch (InvalidOperationException) {
1507 Assert.Fail ("BeginAcceptSocketBound #2");
1515 public void BeginAcceptSocket ()
1517 Socket sock = new Socket (AddressFamily.InterNetwork,
1520 Socket acc = new Socket (AddressFamily.InterNetwork,
1524 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
1530 BADCalledBack.Reset ();
1532 sock.BeginAccept (acc, 256, BADCallback, sock);
1534 Socket conn = new Socket (AddressFamily.InterNetwork,
1537 byte[] send_bytes = new byte[] {10, 11, 12, 13};
1540 conn.Send (send_bytes);
1542 if (BADCalledBack.WaitOne (2000, false) == false) {
1543 Assert.Fail ("BeginAcceptSocket wait timed out");
1546 Assert.AreEqual (true, BADAccepted, "BeginAcceptSocket #1");
1547 Assert.AreEqual (true, BADSocket.Connected, "BeginAcceptSocket #2");
1548 Assert.AreEqual (false, sock.Connected, "BeginAcceptSocket #3");
1549 Assert.AreEqual (true, conn.Connected, "BeginAcceptSocket #4");
1550 Assert.AreEqual (send_bytes.Length, BADByteCount, "BeginAcceptSocket #5");
1551 Assert.AreEqual (AddressFamily.InterNetwork, acc.AddressFamily, "BeginAcceptSocket #6");
1552 Assert.AreEqual (SocketType.Stream, acc.SocketType, "BeginAcceptSocket #7");
1553 Assert.AreEqual (ProtocolType.Tcp, acc.ProtocolType, "BeginAcceptSocket #8");
1554 Assert.AreEqual (conn.LocalEndPoint, acc.RemoteEndPoint, "BeginAcceptSocket #9");
1556 /* The MS runtime gives the returned data in a
1557 * much bigger array. TODO: investigate
1558 * whether it the size correlates to the first
1559 * parameter in BeginAccept()
1561 Assert.IsFalse (BADBytes.Length == send_bytes.Length,
1562 "BeginAcceptSocket #10");
1564 for(int i = 0; i < send_bytes.Length; i++) {
1565 Assert.AreEqual (send_bytes[i], BADBytes[i], "BeginAcceptSocket #" + (i+11).ToString ());
1575 public void BeginAcceptSocketClosed ()
1577 Socket sock = new Socket (AddressFamily.InterNetwork,
1580 Socket acc = new Socket (AddressFamily.InterNetwork,
1587 sock.BeginAccept (acc, 256, BADCallback, null);
1588 Assert.Fail ("BeginAcceptSocketClosed #1");
1589 } catch (ObjectDisposedException) {
1591 Assert.Fail ("BeginAcceptSocketClosed #2");
1598 public void BeginAcceptSocketAccClosed ()
1600 Socket sock = new Socket (AddressFamily.InterNetwork,
1603 Socket acc = new Socket (AddressFamily.InterNetwork,
1606 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
1614 BADCalledBack.Reset ();
1617 sock.BeginAccept (acc, 256, BADCallback, null);
1618 Assert.Fail ("BeginAcceptSocketAccClosed #1");
1619 } catch (ObjectDisposedException) {
1621 Assert.Fail ("BeginAcceptSocketAccClosed #2");
1627 static bool BCConnected = false;
1628 static ManualResetEvent BCCalledBack = new ManualResetEvent (false);
1630 private static void BCCallback (IAsyncResult asyncResult)
1632 Socket sock = (Socket)asyncResult.AsyncState;
1635 sock.EndConnect (asyncResult);
1636 } catch (Exception e) {
1637 Console.WriteLine ("BCCallback exception:");
1638 Console.WriteLine (e);
1645 BCCalledBack.Set ();
1649 public void BeginConnectAddressPort ()
1651 Socket sock = new Socket (AddressFamily.InterNetwork,
1654 Socket listen = new Socket (AddressFamily.InterNetwork,
1657 IPAddress ip = IPAddress.Loopback;
1658 IPEndPoint ep = new IPEndPoint (ip, 1244);
1663 BCCalledBack.Reset ();
1665 BCConnected = false;
1667 sock.BeginConnect (ip, 1244, BCCallback, sock);
1669 if (BCCalledBack.WaitOne (2000, false) == false) {
1670 Assert.Fail ("BeginConnectAddressPort wait timed out");
1673 Assert.AreEqual (true, BCConnected, "BeginConnectAddressPort #1");
1680 public void BeginConnectAddressPortNull ()
1682 Socket sock = new Socket (AddressFamily.InterNetwork,
1685 IPAddress ip = null;
1688 sock.BeginConnect (ip, 1244, BCCallback,
1690 Assert.Fail ("BeginConnectAddressPortNull #1");
1691 } catch (ArgumentNullException) {
1693 Assert.Fail ("BeginConnectAddressPortNull #2");
1700 public void BeginConnectAddressPortListen ()
1702 Socket sock = new Socket (AddressFamily.InterNetwork,
1705 IPAddress ip = IPAddress.Loopback;
1706 IPEndPoint ep = new IPEndPoint (ip, 1245);
1712 sock.BeginConnect (ip, 1245, BCCallback, sock);
1713 Assert.Fail ("BeginConnectAddressPortListen #1");
1714 } catch (InvalidOperationException) {
1716 Assert.Fail ("BeginConnectAddressPortListen #2");
1723 [ExpectedException (typeof(ObjectDisposedException))]
1724 public void BeginConnectAddressPortClosed ()
1726 Socket sock = new Socket (AddressFamily.InterNetwork,
1729 IPAddress ip = IPAddress.Loopback;
1733 sock.BeginConnect (ip, 1244, BCCallback, sock);
1737 [Category ("NotOnMac")]
1739 * This is not a Mono bug.
1741 * By default, only 127.0.0.1 is enabled and you must explicitly
1742 * enable additional addresses using 'sudo ifconfig lo0 alias 127.0.0.1'.
1744 * I tested this on Mac OS 10.7.4; a 'ping 127.0.0.2' does not work
1745 * until I add that alias.
1748 public void BeginConnectMultiple ()
1750 Socket sock = new Socket (AddressFamily.InterNetwork,
1753 Socket listen = new Socket (AddressFamily.InterNetwork,
1756 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
1758 IPAddress[] ips = new IPAddress[4];
1760 ips[0] = IPAddress.Parse ("127.0.0.4");
1761 ips[1] = IPAddress.Parse ("127.0.0.3");
1762 ips[2] = IPAddress.Parse ("127.0.0.2");
1763 ips[3] = IPAddress.Parse ("127.0.0.1");
1768 BCCalledBack.Reset ();
1770 BCConnected = false;
1772 sock.BeginConnect (ips, 1246, BCCallback, sock);
1774 /* Longer wait here, because the ms runtime
1775 * takes a lot longer to not connect
1778 if (BCCalledBack.WaitOne (30000, false) == false) {
1779 Assert.Fail ("BeginConnectMultiple wait failed");
1783 Assert.IsTrue (BCCalledBack.WaitOne (30000), "#0");
1785 Assert.AreEqual (true, BCConnected, "BeginConnectMultiple #1");
1786 Assert.AreEqual (AddressFamily.InterNetwork, sock.RemoteEndPoint.AddressFamily, "BeginConnectMultiple #2");
1787 IPEndPoint remep = (IPEndPoint)sock.RemoteEndPoint;
1789 Assert.AreEqual (IPAddress.Loopback, remep.Address, "BeginConnectMultiple #2");
1796 public void BeginConnectMultiple2 ()
1798 Socket sock = new Socket (AddressFamily.InterNetwork,
1801 Socket listen = new Socket (AddressFamily.InterNetwork,
1805 // Need at least two addresses.
1806 var ips = Dns.GetHostAddresses (string.Empty);
1808 Assert.Ignore ("This test needs at least two IP addresses.");
1810 var allIps = new IPAddress [ips.Length + 1];
1811 allIps [0] = IPAddress.Loopback;
1812 ips.CopyTo (allIps, 1);
1815 * Only bind to the loopback interface, so all the non-loopback
1816 * IP addresses will fail. BeginConnect()/EndConnect() should
1817 * succeed it it can connect to at least one of the requested
1820 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 1246);
1825 BCCalledBack.Reset ();
1827 BCConnected = false;
1829 sock.BeginConnect (allIps, 1246, BCCallback, sock);
1831 /* Longer wait here, because the ms runtime
1832 * takes a lot longer to not connect
1834 if (BCCalledBack.WaitOne (10000, false) == false) {
1835 Assert.Fail ("BeginConnectMultiple2 wait failed");
1838 Assert.AreEqual (true, BCConnected, "BeginConnectMultiple2 #1");
1839 Assert.AreEqual (AddressFamily.InterNetwork, sock.RemoteEndPoint.AddressFamily, "BeginConnectMultiple2 #2");
1840 IPEndPoint remep = (IPEndPoint)sock.RemoteEndPoint;
1842 Assert.AreEqual (IPAddress.Loopback, remep.Address, "BeginConnectMultiple2 #2");
1850 public void BeginConnectMultipleNull ()
1852 Socket sock = new Socket (AddressFamily.InterNetwork,
1855 IPAddress[] ips = null;
1858 sock.BeginConnect (ips, 1246, BCCallback,
1860 Assert.Fail ("BeginConnectMultipleNull #1");
1861 } catch (ArgumentNullException) {
1863 Assert.Fail ("BeginConnectMultipleNull #2");
1870 public void BeginConnectMultipleListen ()
1872 Socket sock = new Socket (AddressFamily.InterNetwork,
1875 IPAddress[] ips = new IPAddress[4];
1876 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
1879 ips[0] = IPAddress.Parse ("127.0.0.4");
1880 ips[1] = IPAddress.Parse ("127.0.0.3");
1881 ips[2] = IPAddress.Parse ("127.0.0.2");
1882 ips[3] = IPAddress.Parse ("127.0.0.1");
1888 sock.BeginConnect (ips, 1247, BCCallback,
1890 Assert.Fail ("BeginConnectMultipleListen #1");
1891 } catch (InvalidOperationException) {
1893 Assert.Fail ("BeginConnectMultipleListen #2");
1900 [ExpectedException (typeof(ObjectDisposedException))]
1901 public void BeginConnectMultipleClosed ()
1903 Socket sock = new Socket (AddressFamily.InterNetwork,
1906 IPAddress[] ips = new IPAddress[4];
1908 ips[0] = IPAddress.Parse ("127.0.0.4");
1909 ips[1] = IPAddress.Parse ("127.0.0.3");
1910 ips[2] = IPAddress.Parse ("127.0.0.2");
1911 ips[3] = IPAddress.Parse ("127.0.0.1");
1915 sock.BeginConnect (ips, 1247, BCCallback, sock);
1919 public void BeginConnectHostPortNull ()
1921 Socket sock = new Socket (AddressFamily.InterNetwork,
1926 sock.BeginConnect ((string)null, 0,
1928 Assert.Fail ("BeginConnectHostPort #1");
1929 } catch (ArgumentNullException) {
1931 Assert.Fail ("BeginConnectHostPort #2");
1938 public void BeginConnectHostPortListen ()
1940 Socket sock = new Socket (AddressFamily.InterNetwork,
1943 IPAddress ip = IPAddress.Loopback;
1944 IPEndPoint ep = new IPEndPoint (ip, 1248);
1950 sock.BeginConnect ("localhost", 1248,
1952 Assert.Fail ("BeginConnectHostPortListen #1");
1953 } catch (InvalidOperationException) {
1955 Assert.Fail ("BeginConnectHostPortListen #2");
1962 [Category ("NotWorking")] // Need to pick a non-IP AddressFamily that "works" on both mono and ms, this one only works on ms
1963 public void BeginConnectHostPortNotIP ()
1965 Socket sock = new Socket (AddressFamily.NetBios,
1966 SocketType.Seqpacket,
1967 ProtocolType.Unspecified);
1970 sock.BeginConnect ("localhost", 0, BCCallback,
1972 Assert.Fail ("BeginConnectHostPortNotIP #1");
1973 } catch (NotSupportedException) {
1975 Assert.Fail ("BeginConnectHostPortNotIP #2");
1982 [ExpectedException (typeof(ObjectDisposedException))]
1983 public void BeginConnectHostPortClosed ()
1985 Socket sock = new Socket (AddressFamily.InterNetwork,
1991 sock.BeginConnect ("localhost", 0, BCCallback, sock);
1994 static bool BDDisconnected = false;
1995 static ManualResetEvent BDCalledBack = new ManualResetEvent (false);
1997 private static void BDCallback (IAsyncResult asyncResult)
1999 Socket sock = (Socket)asyncResult.AsyncState;
2001 sock.EndDisconnect (asyncResult);
2002 BDDisconnected = true;
2004 BDCalledBack.Set ();
2008 [Category ("NotDotNet")] // "Needs XP or later"
2009 public void BeginDisconnect ()
2011 Socket sock = new Socket (AddressFamily.InterNetwork,
2014 Socket listen = new Socket (AddressFamily.InterNetwork,
2017 IPAddress ip = IPAddress.Loopback;
2018 IPEndPoint ep = new IPEndPoint (ip, 1254);
2023 sock.Connect (ip, 1254);
2025 Assert.AreEqual (true, sock.Connected, "BeginDisconnect #1");
2027 sock.Shutdown (SocketShutdown.Both);
2029 BDCalledBack.Reset ();
2030 BDDisconnected = false;
2032 sock.BeginDisconnect (false, BDCallback, sock);
2034 if (BDCalledBack.WaitOne (2000, false) == false) {
2035 Assert.Fail ("BeginDisconnect wait timed out");
2038 Assert.AreEqual (true, BDDisconnected, "BeginDisconnect #2");
2039 Assert.AreEqual (false, sock.Connected, "BeginDisconnect #3");
2046 public void BeginReceiveSocketError ()
2051 public void BeginReceiveGeneric ()
2056 public void BeginReceiveGenericSocketError ()
2060 private static void BSCallback (IAsyncResult asyncResult)
2062 Socket sock = (Socket)asyncResult.AsyncState;
2064 sock.EndSend (asyncResult);
2068 public void BeginSendNotConnected ()
2070 Socket sock = new Socket (AddressFamily.InterNetwork,
2074 byte[] send_bytes = new byte[] {10, 11, 12, 13};
2077 sock.BeginSend (send_bytes, 0,
2079 SocketFlags.None, BSCallback,
2081 Assert.Fail ("BeginSendNotConnected #1");
2082 } catch (SocketException ex) {
2083 Assert.AreEqual (10057, ex.ErrorCode, "BeginSendNotConnected #2");
2085 Assert.Fail ("BeginSendNotConnected #3");
2092 public void BeginSendSocketError ()
2097 public void BeginSendGeneric ()
2102 public void BeginSendGenericSocketError ()
2107 public void BindTwice ()
2109 Socket sock = new Socket (AddressFamily.InterNetwork,
2112 IPEndPoint ep1 = new IPEndPoint (IPAddress.Loopback,
2114 IPEndPoint ep2 = new IPEndPoint (IPAddress.Loopback,
2121 Assert.Fail ("BindTwice #1");
2122 } catch (SocketException ex) {
2123 Assert.AreEqual (10022, ex.ErrorCode, "BindTwice #2");
2125 Assert.Fail ("BindTwice #3");
2132 public void Close ()
2134 Socket sock = new Socket (AddressFamily.InterNetwork,
2137 Socket listen = new Socket (AddressFamily.InterNetwork,
2140 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
2148 Assert.AreEqual (true, sock.Connected, "Close #1");
2152 Thread.Sleep (3000);
2154 Assert.AreEqual (false, sock.Connected, "Close #2");
2160 public void ConnectAddressPort ()
2162 Socket sock = new Socket (AddressFamily.InterNetwork,
2165 Socket listen = new Socket (AddressFamily.InterNetwork,
2168 IPAddress ip = IPAddress.Loopback;
2169 IPEndPoint ep = new IPEndPoint (ip, 1249);
2174 sock.Connect (ip, 1249);
2176 Assert.AreEqual (true, sock.Connected, "ConnectAddressPort #1");
2183 public void ConnectAddressPortNull ()
2185 Socket sock = new Socket (AddressFamily.InterNetwork,
2188 IPAddress ip = null;
2191 sock.Connect (ip, 1249);
2192 Assert.Fail ("ConnectAddressPortNull #1");
2193 } catch (ArgumentNullException) {
2195 Assert.Fail ("ConnectAddressPortNull #2");
2202 public void ConnectAddressPortListen ()
2204 Socket sock = new Socket (AddressFamily.InterNetwork,
2207 IPAddress ip = IPAddress.Loopback;
2208 IPEndPoint ep = new IPEndPoint (ip, 1250);
2214 sock.Connect (ip, 1250);
2215 Assert.Fail ("ConnectAddressPortListen #1");
2216 } catch (InvalidOperationException) {
2218 Assert.Fail ("ConnectAddressPortListen #2");
2225 [ExpectedException (typeof(ObjectDisposedException))]
2226 public void ConnectAddressPortClosed ()
2228 Socket sock = new Socket (AddressFamily.InterNetwork,
2231 IPAddress ip = IPAddress.Loopback;
2235 sock.Connect (ip, 1250);
2239 [Category ("NotOnMac")] // MacOSX trashes the fd after the failed connect attempt to 127.0.0.4
2241 * This is not a Mono bug.
2243 * By default, only 127.0.0.1 is enabled and you must explicitly
2244 * enable additional addresses using 'sudo ifconfig lo0 alias 127.0.0.1'.
2246 * I tested this on Mac OS 10.7.4; a 'ping 127.0.0.2' does not work
2247 * until I add that alias.
2249 * However, after doing so, Mac OS treats these as separate addresses, ie. attempting
2250 * to connect to 127.0.0.4 yields a connection refused.
2252 * When using Connect(), the .NET runtime also throws an exception if connecting to
2253 * any of the IP addresses fails. This is different with BeginConnect()/EndConnect()
2254 * which succeeds when it can connect to at least one of the addresses.
2257 public void ConnectMultiple ()
2259 Socket sock = new Socket (AddressFamily.InterNetwork,
2262 Socket listen = new Socket (AddressFamily.InterNetwork,
2265 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
2267 IPAddress[] ips = new IPAddress[4];
2269 ips[0] = IPAddress.Parse ("127.0.0.4");
2270 ips[1] = IPAddress.Parse ("127.0.0.3");
2271 ips[2] = IPAddress.Parse ("127.0.0.2");
2272 ips[3] = IPAddress.Parse ("127.0.0.1");
2277 sock.Connect (ips, 1251);
2279 Assert.AreEqual (true, sock.Connected, "ConnectMultiple #1");
2280 Assert.AreEqual (AddressFamily.InterNetwork, sock.RemoteEndPoint.AddressFamily, "ConnectMultiple #2");
2281 IPEndPoint remep = (IPEndPoint)sock.RemoteEndPoint;
2283 Assert.AreEqual (IPAddress.Loopback, remep.Address, "ConnectMultiple #2");
2290 public void ConnectMultiple2 ()
2292 Socket sock = new Socket (AddressFamily.InterNetwork,
2295 Socket listen = new Socket (AddressFamily.InterNetwork,
2299 // Need at least two addresses.
2300 var ips = Dns.GetHostAddresses (string.Empty);
2302 Assert.Ignore ("This test needs at least two IP addresses.");
2304 var allIps = new IPAddress [ips.Length + 1];
2305 allIps [0] = IPAddress.Loopback;
2306 ips.CopyTo (allIps, 1);
2309 * Bind to IPAddress.Any; Connect() will fail unless it can
2310 * connect to all the addresses in allIps.
2312 IPEndPoint ep = new IPEndPoint (IPAddress.Any, 1251);
2317 sock.Connect (allIps, 1251);
2319 Assert.AreEqual (true, sock.Connected, "ConnectMultiple2 #1");
2320 Assert.AreEqual (AddressFamily.InterNetwork, sock.RemoteEndPoint.AddressFamily, "ConnectMultiple2 #2");
2321 IPEndPoint remep = (IPEndPoint)sock.RemoteEndPoint;
2323 Assert.AreEqual (IPAddress.Loopback, remep.Address, "ConnectMultiple2 #3");
2330 public void ConnectMultipleNull ()
2332 Socket sock = new Socket (AddressFamily.InterNetwork,
2335 IPAddress[] ips = null;
2338 sock.Connect (ips, 1251);
2339 Assert.Fail ("ConnectMultipleNull #1");
2340 } catch (ArgumentNullException) {
2342 Assert.Fail ("ConnectMultipleNull #2");
2349 public void ConnectMultipleListen ()
2351 Socket sock = new Socket (AddressFamily.InterNetwork,
2354 IPAddress[] ips = new IPAddress[4];
2355 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
2358 ips[0] = IPAddress.Parse ("127.0.0.4");
2359 ips[1] = IPAddress.Parse ("127.0.0.3");
2360 ips[2] = IPAddress.Parse ("127.0.0.2");
2361 ips[3] = IPAddress.Parse ("127.0.0.1");
2367 sock.Connect (ips, 1252);
2368 Assert.Fail ("ConnectMultipleListen #1");
2369 } catch (InvalidOperationException) {
2371 Assert.Fail ("ConnectMultipleListen #2");
2378 [ExpectedException (typeof(ObjectDisposedException))]
2379 public void ConnectMultipleClosed ()
2381 Socket sock = new Socket (AddressFamily.InterNetwork,
2384 IPAddress[] ips = new IPAddress[4];
2386 ips[0] = IPAddress.Parse ("127.0.0.4");
2387 ips[1] = IPAddress.Parse ("127.0.0.3");
2388 ips[2] = IPAddress.Parse ("127.0.0.2");
2389 ips[3] = IPAddress.Parse ("127.0.0.1");
2393 sock.Connect (ips, 1252);
2397 public void ConnectHostPortNull ()
2399 Socket sock = new Socket (AddressFamily.InterNetwork,
2404 sock.Connect ((string)null, 0);
2405 Assert.Fail ("ConnectHostPort #1");
2406 } catch (ArgumentNullException) {
2408 Assert.Fail ("ConnectHostPort #2");
2415 public void ConnectHostPortListen ()
2417 Socket sock = new Socket (AddressFamily.InterNetwork,
2420 IPAddress ip = IPAddress.Loopback;
2421 IPEndPoint ep = new IPEndPoint (ip, 1253);
2427 sock.Connect ("localhost", 1253);
2428 Assert.Fail ("ConnectHostPortListen #1");
2429 } catch (InvalidOperationException) {
2431 Assert.Fail ("ConnectHostPortListen #2");
2438 [Category ("NotWorking")] // Need to pick a non-IP AddressFamily that "works" on both mono and ms, this one only works on ms
2439 public void ConnectHostPortNotIP ()
2441 Socket sock = new Socket (AddressFamily.NetBios,
2442 SocketType.Seqpacket,
2443 ProtocolType.Unspecified);
2446 sock.Connect ("localhost", 0);
2447 Assert.Fail ("ConnectHostPortNotIP #1");
2448 } catch (NotSupportedException) {
2450 Assert.Fail ("ConnectHostPortNotIP #2");
2457 [ExpectedException (typeof(ObjectDisposedException))]
2458 public void ConnectHostPortClosed ()
2460 Socket sock = new Socket (AddressFamily.InterNetwork,
2466 sock.Connect ("localhost", 0);
2470 [Category ("NotDotNet")] // "Needs XP or later"
2471 public void Disconnect ()
2473 Socket sock = new Socket (AddressFamily.InterNetwork,
2476 Socket listen = new Socket (AddressFamily.InterNetwork,
2479 IPAddress ip = IPAddress.Loopback;
2480 IPEndPoint ep = new IPEndPoint (ip, 1255);
2485 sock.Connect (ip, 1255);
2487 Assert.AreEqual (true, sock.Connected, "Disconnect #1");
2489 sock.Shutdown (SocketShutdown.Both);
2491 sock.Disconnect (false);
2493 Assert.AreEqual (false, sock.Connected, "BeginDisconnect #3");
2500 public void DuplicateAndClose ()
2505 public void IOControl ()
2510 public void ReceiveGeneric ()
2514 IPEndPoint endpoint = new IPEndPoint(IPAddress.Loopback, 1258);
2516 Socket listensock = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
2517 listensock.Bind (endpoint);
2518 listensock.Listen(1);
2520 Socket sendsock = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
2521 sendsock.Connect(endpoint);
2523 Socket clientsock = listensock.Accept();
2525 byte[] sendbuf = new byte[256];
2527 for(i = 0; i < 256; i++) {
2528 sendbuf[i] = (byte)i;
2530 for (i = 4; i < 6; i++) {
2531 Assert.AreEqual (sendbuf[i], (byte)i,
2532 "#1/" + i.ToString());
2536 sendsock.Send (sendbuf, 0, 256, SocketFlags.None,
2540 byte[] recvbuf = new byte[256];
2541 List<ArraySegment<byte>> recvbuflist = new List<ArraySegment<byte>>(2);
2542 recvbuflist.Add(new ArraySegment<byte>(recvbuf, 4, 2));
2543 recvbuflist.Add(new ArraySegment<byte>(recvbuf, 20, 230));
2545 clientsock.Receive (recvbuflist);
2547 /* recvbuf should now hold the first 2 bytes
2548 * of sendbuf from pos 4, and the next 230
2549 * bytes of sendbuf from pos 20
2552 for (i = 0; i < 2; i++) {
2553 Assert.AreEqual (sendbuf[i], recvbuf[i + 4],
2554 "#2/" + i.ToString());
2556 for (i = 2; i < 232; i++) {
2557 Assert.AreEqual (sendbuf[i], recvbuf[i + 18],
2558 "#2/" + i.ToString());
2562 clientsock.Close ();
2563 listensock.Close ();
2567 public void SendGeneric ()
2571 IPEndPoint endpoint = new IPEndPoint(IPAddress.Loopback, 1259);
2573 Socket listensock = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
2574 listensock.Bind (endpoint);
2575 listensock.Listen(1);
2577 Socket sendsock = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
2578 sendsock.Connect(endpoint);
2580 Socket clientsock = listensock.Accept();
2582 byte[] sendbuf = new byte[256];
2583 List<ArraySegment<byte>> sendbuflist = new List<ArraySegment<byte>>(2);
2585 sendbuflist.Add(new ArraySegment<byte>(sendbuf, 4, 2));
2586 sendbuflist.Add(new ArraySegment<byte>(sendbuf, 20, 230));
2588 for(i = 0; i < 256; i++) {
2589 sendbuf[i] = (byte)i;
2591 for (i = 4; i < 6; i++) {
2592 Assert.AreEqual (sendbuf[i], (byte)i,
2593 "#1/" + i.ToString());
2597 sendsock.Send (sendbuflist, SocketFlags.None, out err);
2600 byte[] recvbuf = new byte[256];
2602 clientsock.Receive (recvbuf);
2604 /* The first 2 bytes of recvbuf should now
2605 * hold 2 bytes of sendbuf from pos 4, and the
2606 * next 230 bytes of recvbuf should be sendbuf
2610 for (i = 0; i < 2; i++) {
2611 Assert.AreEqual (recvbuf[i], sendbuf[i + 4],
2612 "#2/" + i.ToString());
2614 for (i = 2; i < 232; i++) {
2615 Assert.AreEqual (recvbuf[i], sendbuf[i + 18],
2616 "#2/" + i.ToString());
2620 clientsock.Close ();
2621 listensock.Close ();
2625 public void ListenNotBound ()
2627 Socket sock = new Socket (AddressFamily.InterNetwork,
2633 Assert.Fail ("ListenNotBound #1");
2634 } catch (SocketException ex) {
2635 Assert.AreEqual (10022, ex.ErrorCode, "ListenNotBound #2");
2637 Assert.Fail ("ListenNotBound #3");
2643 static Socket CWRSocket;
2644 static bool CWRReceiving = true;
2645 static ManualResetEvent CWRReady = new ManualResetEvent (false);
2647 private static void CWRReceiveThread ()
2649 byte[] buf = new byte[256];
2652 CWRSocket.Receive (buf);
2653 } catch (SocketException) {
2654 CWRReceiving = false;
2661 public void CloseWhileReceiving ()
2663 CWRSocket = new Socket (AddressFamily.InterNetwork,
2666 CWRSocket.Bind (new IPEndPoint (IPAddress.Loopback,
2669 Thread recv_thread = new Thread (new ThreadStart (CWRReceiveThread));
2671 recv_thread.Start ();
2672 Thread.Sleep (250); /* Wait for the thread to be already receiving */
2675 if (CWRReady.WaitOne (1000, false) == false) {
2676 Assert.Fail ("CloseWhileReceiving wait timed out");
2679 Assert.IsFalse (CWRReceiving);
2682 static bool RRCLastRead = false;
2683 static ManualResetEvent RRCReady = new ManualResetEvent (false);
2685 private static void RRCClientThread ()
2687 byte[] bytes = new byte[8];
2690 Socket sock = new Socket (AddressFamily.InterNetwork,
2693 sock.Connect (new IPEndPoint (IPAddress.Loopback,
2696 NetworkStream stream = new NetworkStream (sock);
2698 readbyte = stream.ReadByte ();
2699 Assert.AreEqual (0, readbyte, "ReceiveRemoteClosed #1");
2701 stream.Read (bytes, 0, 0);
2703 readbyte = stream.ReadByte ();
2704 Assert.AreEqual (0, readbyte, "ReceiveRemoteClosed #2");
2706 stream.Read (bytes, 0, 0);
2708 readbyte = stream.ReadByte ();
2709 Assert.AreEqual (-1, readbyte, "ReceiveRemoteClosed #3");
2717 [Test] // Receive (Byte [])
2718 public void Receive1_Buffer_Null ()
2720 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
2724 s.Receive ((byte []) null);
2726 } catch (ArgumentNullException ex) {
2727 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
2728 Assert.IsNull (ex.InnerException, "#3");
2729 Assert.IsNotNull (ex.Message, "#4");
2730 Assert.AreEqual ("buffer", ex.ParamName, "#5");
2736 [Test] // Receive (Byte [])
2737 public void Receive1_Socket_Closed ()
2739 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
2744 s.Receive ((byte []) null);
2746 } catch (ObjectDisposedException ex) {
2747 // Cannot access a disposed object
2748 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
2749 Assert.IsNull (ex.InnerException, "#3");
2750 Assert.IsNotNull (ex.Message, "#4");
2751 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
2755 [Test] // Receive (Byte [], SocketFlags)
2756 public void Receive2_Buffer_Null ()
2758 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
2762 s.Receive ((byte []) null, (SocketFlags) 666);
2764 } catch (ArgumentNullException ex) {
2765 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
2766 Assert.IsNull (ex.InnerException, "#3");
2767 Assert.IsNotNull (ex.Message, "#4");
2768 Assert.AreEqual ("buffer", ex.ParamName, "#5");
2774 [Test] // Receive (Byte [], SocketFlags)
2775 public void Receive2_Socket_Closed ()
2777 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
2782 s.Receive ((byte []) null, (SocketFlags) 666);
2784 } catch (ObjectDisposedException ex) {
2785 // Cannot access a disposed object
2786 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
2787 Assert.IsNull (ex.InnerException, "#3");
2788 Assert.IsNotNull (ex.Message, "#4");
2789 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
2793 [Test] // Receive (Byte [], Int32, SocketFlags)
2794 public void Receive3_Buffer_Null ()
2796 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
2800 s.Receive ((byte []) null, 0, (SocketFlags) 666);
2802 } catch (ArgumentNullException ex) {
2803 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
2804 Assert.IsNull (ex.InnerException, "#3");
2805 Assert.IsNotNull (ex.Message, "#4");
2806 Assert.AreEqual ("buffer", ex.ParamName, "#5");
2812 [Test] // Receive (Byte [], Int32, SocketFlags)
2813 public void Receive3_Socket_Closed ()
2815 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
2820 s.Receive ((byte []) null, 0, (SocketFlags) 666);
2822 } catch (ObjectDisposedException ex) {
2823 // Cannot access a disposed object
2824 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
2825 Assert.IsNull (ex.InnerException, "#3");
2826 Assert.IsNotNull (ex.Message, "#4");
2827 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
2831 [Test] // Receive (Byte [], Int32, Int32, SocketFlags)
2832 public void Receive4_Buffer_Null ()
2834 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
2838 s.Receive ((byte []) null, 0, 0, (SocketFlags) 666);
2840 } catch (ArgumentNullException ex) {
2841 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
2842 Assert.IsNull (ex.InnerException, "#3");
2843 Assert.IsNotNull (ex.Message, "#4");
2844 Assert.AreEqual ("buffer", ex.ParamName, "#5");
2850 [Test] // Receive (Byte [], Int32, Int32, SocketFlags)
2851 public void Receive4_Socket_Closed ()
2853 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
2858 s.Receive ((byte []) null, 0, 0, (SocketFlags) 666);
2860 } catch (ObjectDisposedException ex) {
2861 // Cannot access a disposed object
2862 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
2863 Assert.IsNull (ex.InnerException, "#3");
2864 Assert.IsNotNull (ex.Message, "#4");
2865 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
2869 [Test] // Receive (Byte [], Int32, Int32, SocketFlags, out SocketError)
2870 public void Receive5_Buffer_Null ()
2872 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
2877 s.Receive ((byte []) null, 0, 0, SocketFlags.None, out error);
2879 } catch (ArgumentNullException ex) {
2880 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
2881 Assert.IsNull (ex.InnerException, "#3");
2882 Assert.IsNotNull (ex.Message, "#4");
2883 Assert.AreEqual ("buffer", ex.ParamName, "#5");
2889 [Test] // Receive (Byte [], Int32, Int32, SocketFlags, out SocketError)
2890 public void Receive5_Socket_Closed ()
2892 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
2898 s.Receive ((byte []) null, 0, 0, SocketFlags.None, out error);
2900 } catch (ObjectDisposedException ex) {
2901 // Cannot access a disposed object
2902 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
2903 Assert.IsNull (ex.InnerException, "#3");
2904 Assert.IsNotNull (ex.Message, "#4");
2905 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
2909 [Test] // Receive (IList<ArraySegment<Byte>>)
2910 public void Receive6_Buffers_Null ()
2912 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
2916 s.Receive ((IList<ArraySegment<byte>>) null);
2918 } catch (ArgumentNullException ex) {
2919 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
2920 Assert.IsNull (ex.InnerException, "#3");
2921 Assert.IsNotNull (ex.Message, "#4");
2922 Assert.AreEqual ("buffers", ex.ParamName, "#5");
2928 [Test] // Receive (IList<ArraySegment<Byte>>)
2929 public void Receive6_Socket_Closed ()
2931 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
2936 s.Receive ((IList<ArraySegment<byte>>) null);
2938 } catch (ObjectDisposedException ex) {
2939 // Cannot access a disposed object
2940 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
2941 Assert.IsNull (ex.InnerException, "#3");
2942 Assert.IsNotNull (ex.Message, "#4");
2943 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
2947 [Test] // Receive (IList<ArraySegment<Byte>>, SocketFlags)
2948 public void Receive7_Buffers_Null ()
2950 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
2954 s.Receive ((IList<ArraySegment<byte>>) null, (SocketFlags) 666);
2956 } catch (ArgumentNullException ex) {
2957 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
2958 Assert.IsNull (ex.InnerException, "#3");
2959 Assert.IsNotNull (ex.Message, "#4");
2960 Assert.AreEqual ("buffers", ex.ParamName, "#5");
2966 [Test] // Receive (IList<ArraySegment<Byte>>, SocketFlags)
2967 public void Receive7_Socket_Closed ()
2969 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
2974 s.Receive ((IList<ArraySegment<byte>>) null, (SocketFlags) 666);
2976 } catch (ObjectDisposedException ex) {
2977 // Cannot access a disposed object
2978 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
2979 Assert.IsNull (ex.InnerException, "#3");
2980 Assert.IsNotNull (ex.Message, "#4");
2981 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
2985 [Test] // Receive (IList<ArraySegment<Byte>>, SocketFlags, out SocketError)
2986 public void Receive8_Buffers_Null ()
2988 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
2993 s.Receive ((IList<ArraySegment<byte>>) null, (SocketFlags) 666,
2996 } catch (ArgumentNullException ex) {
2997 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
2998 Assert.IsNull (ex.InnerException, "#3");
2999 Assert.IsNotNull (ex.Message, "#4");
3000 Assert.AreEqual ("buffers", ex.ParamName, "#5");
3006 [Test] // Receive (IList<ArraySegment<Byte>>, SocketFlags, out SocketError)
3007 public void Receive8_Socket_Closed ()
3009 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3015 s.Receive ((IList<ArraySegment<byte>>) null, (SocketFlags) 666,
3018 } catch (ObjectDisposedException ex) {
3019 // Cannot access a disposed object
3020 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
3021 Assert.IsNull (ex.InnerException, "#3");
3022 Assert.IsNotNull (ex.Message, "#4");
3023 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
3029 [Test] // ReceiveFrom (Byte [], ref EndPoint)
3030 public void ReceiveFrom1_Buffer_Null ()
3032 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3035 EndPoint remoteEP = new IPEndPoint (IPAddress.Loopback, 8001);
3037 s.ReceiveFrom ((Byte []) null, ref remoteEP);
3039 } catch (ArgumentNullException ex) {
3040 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
3041 Assert.IsNull (ex.InnerException, "#3");
3042 Assert.IsNotNull (ex.Message, "#4");
3043 Assert.AreEqual ("buffer", ex.ParamName, "#5");
3049 [Test] // ReceiveFrom (Byte [], ref EndPoint)
3050 public void ReceiveFrom1_RemoteEP_Null ()
3052 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3055 byte [] buffer = new byte [0];
3056 EndPoint remoteEP = null;
3058 s.ReceiveFrom (buffer, ref remoteEP);
3060 } catch (ArgumentNullException ex) {
3061 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
3062 Assert.IsNull (ex.InnerException, "#3");
3063 Assert.IsNotNull (ex.Message, "#4");
3064 Assert.AreEqual ("remoteEP", ex.ParamName, "#5");
3070 [Test] // ReceiveFrom (Byte [], ref EndPoint)
3071 public void ReceiveFrom1_Socket_Closed ()
3073 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3077 EndPoint remoteEP = new IPEndPoint (IPAddress.Loopback, 8001);
3079 s.ReceiveFrom ((Byte []) null, ref remoteEP);
3081 } catch (ObjectDisposedException ex) {
3082 // Cannot access a disposed object
3083 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
3084 Assert.IsNull (ex.InnerException, "#3");
3085 Assert.IsNotNull (ex.Message, "#4");
3086 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
3090 [Test] // ReceiveFrom (Byte [], SocketFlags, ref EndPoint)
3091 public void ReceiveFrom2_Buffer_Null ()
3093 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3096 EndPoint remoteEP = new IPEndPoint (IPAddress.Loopback, 8001);
3098 s.ReceiveFrom ((Byte []) null, (SocketFlags) 666, ref remoteEP);
3100 } catch (ArgumentNullException ex) {
3101 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
3102 Assert.IsNull (ex.InnerException, "#3");
3103 Assert.IsNotNull (ex.Message, "#4");
3104 Assert.AreEqual ("buffer", ex.ParamName, "#5");
3110 [Test] // ReceiveFrom (Byte [], SocketFlags, ref EndPoint)
3111 public void ReceiveFrom2_RemoteEP_Null ()
3113 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3116 byte [] buffer = new byte [5];
3117 EndPoint remoteEP = null;
3119 s.ReceiveFrom (buffer, (SocketFlags) 666, ref remoteEP);
3121 } catch (ArgumentNullException ex) {
3122 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
3123 Assert.IsNull (ex.InnerException, "#3");
3124 Assert.IsNotNull (ex.Message, "#4");
3125 Assert.AreEqual ("remoteEP", ex.ParamName, "#5");
3131 [Test] // ReceiveFrom (Byte [], SocketFlags, ref EndPoint)
3132 public void ReceiveFrom2_Socket_Closed ()
3134 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3138 EndPoint remoteEP = new IPEndPoint (IPAddress.Loopback, 8001);
3140 s.ReceiveFrom ((Byte []) null, (SocketFlags) 666, ref remoteEP);
3142 } catch (ObjectDisposedException ex) {
3143 // Cannot access a disposed object
3144 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
3145 Assert.IsNull (ex.InnerException, "#3");
3146 Assert.IsNotNull (ex.Message, "#4");
3147 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
3151 [Test] // ReceiveFrom (Byte [], Int32, SocketFlags, ref EndPoint)
3152 public void ReceiveFrom3_Buffer_Null ()
3154 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3157 EndPoint remoteEP = new IPEndPoint (IPAddress.Loopback, 8001);
3159 s.ReceiveFrom ((Byte []) null, -1, (SocketFlags) 666,
3162 } catch (ArgumentNullException ex) {
3163 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
3164 Assert.IsNull (ex.InnerException, "#3");
3165 Assert.IsNotNull (ex.Message, "#4");
3166 Assert.AreEqual ("buffer", ex.ParamName, "#5");
3172 [Test] // ReceiveFrom (Byte [], Int32, SocketFlags, ref EndPoint)
3173 public void ReceiveFrom3_RemoteEP_Null ()
3175 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3178 byte [] buffer = new byte [5];
3179 EndPoint remoteEP = null;
3181 s.ReceiveFrom (buffer, -1, (SocketFlags) 666, ref remoteEP);
3183 } catch (ArgumentNullException ex) {
3184 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
3185 Assert.IsNull (ex.InnerException, "#3");
3186 Assert.IsNotNull (ex.Message, "#4");
3187 Assert.AreEqual ("remoteEP", ex.ParamName, "#5");
3193 [Test] // ReceiveFrom (Byte [], Int32, SocketFlags, ref EndPoint)
3194 public void ReceiveFrom3_Size_OutOfRange ()
3197 byte [] buffer = new byte [5];
3198 EndPoint remoteEP = new IPEndPoint (IPAddress.Loopback, 8001);
3201 s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3204 s.ReceiveFrom (buffer, -1, (SocketFlags) 666, ref remoteEP);
3205 Assert.Fail ("#A1");
3206 } catch (ArgumentOutOfRangeException ex) {
3207 // Specified argument was out of the range of valid values
3208 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#A2");
3209 Assert.IsNull (ex.InnerException, "#A3");
3210 Assert.IsNotNull (ex.Message, "#A4");
3211 Assert.AreEqual ("size", ex.ParamName, "#A5");
3216 // size > buffer length
3217 s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3220 s.ReceiveFrom (buffer, (buffer.Length + 1), (SocketFlags) 666,
3222 Assert.Fail ("#B1");
3223 } catch (ArgumentOutOfRangeException ex) {
3224 // Specified argument was out of the range of valid values
3225 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#B2");
3226 Assert.IsNull (ex.InnerException, "#B3");
3227 Assert.IsNotNull (ex.Message, "#B4");
3228 Assert.AreEqual ("size", ex.ParamName, "#B5");
3234 [Test] // ReceiveFrom (Byte [], Int32, SocketFlags, ref EndPoint)
3235 public void ReceiveFrom3_Socket_Closed ()
3237 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3241 EndPoint remoteEP = new IPEndPoint (IPAddress.Loopback, 8001);
3243 s.ReceiveFrom ((Byte []) null, -1, (SocketFlags) 666,
3246 } catch (ObjectDisposedException ex) {
3247 // Cannot access a disposed object
3248 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
3249 Assert.IsNull (ex.InnerException, "#3");
3250 Assert.IsNotNull (ex.Message, "#4");
3251 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
3255 [Test] // ReceiveFrom (Byte [], Int32, Int32, SocketFlags, EndPoint)
3256 public void ReceiveFrom4_Buffer_Null ()
3258 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3260 EndPoint remoteEP = new IPEndPoint (IPAddress.Loopback, 8001);
3263 s.ReceiveFrom ((Byte []) null, -1, -1, (SocketFlags) 666,
3266 } catch (ArgumentNullException ex) {
3267 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
3268 Assert.IsNull (ex.InnerException, "#3");
3269 Assert.IsNotNull (ex.Message, "#4");
3270 Assert.AreEqual ("buffer", ex.ParamName, "#5");
3274 [Test] // ReceiveFrom (Byte [], Int32, Int32, SocketFlags, EndPoint)
3275 public void ReceiveFrom4_Offset_OutOfRange ()
3278 byte [] buffer = new byte [5];
3279 EndPoint remoteEP = new IPEndPoint (IPAddress.Loopback, 8001);
3282 s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3285 s.ReceiveFrom (buffer, -1, 0, (SocketFlags) 666,
3287 Assert.Fail ("#A1");
3288 } catch (ArgumentOutOfRangeException ex) {
3289 // Specified argument was out of the range of valid values
3290 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#A2");
3291 Assert.IsNull (ex.InnerException, "#A3");
3292 Assert.IsNotNull (ex.Message, "#A4");
3293 Assert.AreEqual ("offset", ex.ParamName, "#A5");
3298 // offset > buffer length
3299 s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3302 s.ReceiveFrom (buffer, (buffer.Length + 1), 0, (SocketFlags) 666,
3304 Assert.Fail ("#B1");
3305 } catch (ArgumentOutOfRangeException ex) {
3306 // Specified argument was out of the range of valid values
3307 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#B2");
3308 Assert.IsNull (ex.InnerException, "#B3");
3309 Assert.IsNotNull (ex.Message, "#B4");
3310 Assert.AreEqual ("offset", ex.ParamName, "#B5");
3316 [Test] // ReceiveFrom (Byte [], Int32, Int32, SocketFlags, ref IPEndPoint)
3317 public void ReceiveFrom4_RemoteEP_Null ()
3319 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3321 byte [] buffer = new byte [5];
3322 EndPoint remoteEP = null;
3325 s.ReceiveFrom (buffer, -1, -1, (SocketFlags) 666, ref remoteEP);
3327 } catch (ArgumentNullException ex) {
3328 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
3329 Assert.IsNull (ex.InnerException, "#3");
3330 Assert.IsNotNull (ex.Message, "#4");
3331 Assert.AreEqual ("remoteEP", ex.ParamName, "#5");
3337 [Test] // ReceiveFrom (Byte [], Int32, Int32, SocketFlags, EndPoint)
3338 public void ReceiveFrom4_Size_OutOfRange ()
3341 byte [] buffer = new byte [5];
3342 EndPoint remoteEP = new IPEndPoint (IPAddress.Loopback, 8001);
3345 s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3348 s.ReceiveFrom (buffer, 0, -1, (SocketFlags) 666,
3350 Assert.Fail ("#A1");
3351 } catch (ArgumentOutOfRangeException ex) {
3352 // Specified argument was out of the range of valid values
3353 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#A2");
3354 Assert.IsNull (ex.InnerException, "#A3");
3355 Assert.IsNotNull (ex.Message, "#A4");
3356 Assert.AreEqual ("size", ex.ParamName, "#A5");
3361 // size > buffer length
3362 s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3365 s.ReceiveFrom (buffer, 0, (buffer.Length + 1), (SocketFlags) 666,
3367 Assert.Fail ("#B1");
3368 } catch (ArgumentOutOfRangeException ex) {
3369 // Specified argument was out of the range of valid values
3370 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#B2");
3371 Assert.IsNull (ex.InnerException, "#B3");
3372 Assert.IsNotNull (ex.Message, "#B4");
3373 Assert.AreEqual ("size", ex.ParamName, "#B5");
3378 // offset + size > buffer length
3379 s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3382 s.ReceiveFrom (buffer, 2, 4, (SocketFlags) 666, ref remoteEP);
3383 Assert.Fail ("#C1");
3384 } catch (ArgumentOutOfRangeException ex) {
3385 // Specified argument was out of the range of valid values
3386 Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#C2");
3387 Assert.IsNull (ex.InnerException, "#C3");
3388 Assert.IsNotNull (ex.Message, "#C4");
3389 Assert.AreEqual ("size", ex.ParamName, "#C5");
3395 [Test] // ReceiveFrom (Byte [], Int32, Int32, SocketFlags, ref EndPoint)
3396 public void ReceiveFrom4_Socket_Closed ()
3398 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream,
3402 byte [] buffer = new byte [5];
3403 EndPoint remoteEP = new IPEndPoint (IPAddress.Loopback, 8001);
3405 s.ReceiveFrom (buffer, -1, -1, (SocketFlags) 666,
3408 } catch (ObjectDisposedException ex) {
3409 // Cannot access a disposed object
3410 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
3411 Assert.IsNull (ex.InnerException, "#3");
3412 Assert.IsNotNull (ex.Message, "#4");
3413 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
3418 public void ReceiveRemoteClosed ()
3420 Socket sock = new Socket (AddressFamily.InterNetwork,
3423 sock.Bind (new IPEndPoint (IPAddress.Loopback, 1257));
3427 Thread client_thread = new Thread (new ThreadStart (RRCClientThread));
3428 client_thread.Start ();
3430 Socket client = sock.Accept ();
3431 NetworkStream stream = new NetworkStream (client);
3432 stream.WriteByte (0x00);
3433 stream.WriteByte (0x00);
3437 RRCReady.WaitOne (1000, false);
3438 Assert.IsTrue (RRCLastRead);
3442 // Test case for bug #471580
3444 public void UdpDoubleBind ()
3446 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
3447 s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, 1);
3449 s.Bind (new IPEndPoint (IPAddress.Any, 12345));
3451 Socket ss = new Socket (AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
3452 ss.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, 1);
3454 ss.Bind (new IPEndPoint (IPAddress.Any, 12345));
3456 // If we make it this far, we succeeded.
3463 [Category ("NotOnMac")]
3464 public void ConnectedProperty ()
3466 TcpListener listener = new TcpListener (IPAddress.Loopback, 23456);
3469 Socket client = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
3470 client.Connect (IPAddress.Loopback, 23456);
3471 Socket server = listener.AcceptSocket ();
3474 server.EndSend(server.BeginSend (new byte[10], 0, 10, SocketFlags.None, null, null));
3477 server.EndReceive (server.BeginReceive (new byte[10], 0, 10, SocketFlags.None, null, null));
3480 Assert.IsTrue (!client.Connected);
3481 Assert.IsTrue (!server.Connected);
3489 [Test] // GetSocketOption (SocketOptionLevel, SocketOptionName)
3490 public void GetSocketOption1_Socket_Closed ()
3492 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
3495 s.GetSocketOption (0, 0);
3497 } catch (ObjectDisposedException ex) {
3498 // Cannot access a disposed object
3499 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
3500 Assert.IsNull (ex.InnerException, "#3");
3501 Assert.IsNotNull (ex.Message, "#4");
3502 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
3506 [Test] // GetSocketOption (SocketOptionLevel, SocketOptionName, Byte [])
3507 public void GetSocketOption2_OptionValue_Null ()
3509 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
3511 s.GetSocketOption (SocketOptionLevel.Socket, SocketOptionName.Linger,
3514 } catch (SocketException ex) {
3515 // The system detected an invalid pointer address in attempting
3516 // to use a pointer argument in a call
3517 Assert.AreEqual (typeof (SocketException), ex.GetType (), "#2");
3518 Assert.AreEqual (10014, ex.ErrorCode, "#3");
3519 Assert.IsNull (ex.InnerException, "#4");
3520 Assert.IsNotNull (ex.Message, "#5");
3521 Assert.AreEqual (10014, ex.NativeErrorCode, "#6");
3522 Assert.AreEqual (SocketError.Fault, ex.SocketErrorCode, "#7");
3526 [Test] // GetSocketOption (SocketOptionLevel, SocketOptionName, Byte [])
3527 public void GetSocketOption2_Socket_Closed ()
3529 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
3532 s.GetSocketOption (0, 0, (byte []) null);
3534 } catch (ObjectDisposedException ex) {
3535 // Cannot access a disposed object
3536 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
3537 Assert.IsNull (ex.InnerException, "#3");
3538 Assert.IsNotNull (ex.Message, "#4");
3539 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
3543 [Test] // GetSocketOption (SocketOptionLevel, SocketOptionName, Int32)
3544 public void GetSocketOption3_Socket_Closed ()
3546 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
3549 s.GetSocketOption (0, 0, 0);
3551 } catch (ObjectDisposedException ex) {
3552 // Cannot access a disposed object
3553 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
3554 Assert.IsNull (ex.InnerException, "#3");
3555 Assert.IsNotNull (ex.Message, "#4");
3556 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
3560 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Byte [])
3561 public void SetSocketOption1_DontLinger ()
3563 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
3564 s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.DontLinger,
3565 new byte [] { 0x00 });
3566 s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.DontLinger,
3567 new byte [] { 0x01 });
3571 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Byte [])
3572 public void SetSocketOption1_DontLinger_Null ()
3574 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
3576 s.SetSocketOption (SocketOptionLevel.Socket,
3577 SocketOptionName.DontLinger, (byte []) null);
3579 } catch (SocketException ex) {
3580 // The system detected an invalid pointer address in attempting
3581 // to use a pointer argument in a call
3582 Assert.AreEqual (typeof (SocketException), ex.GetType (), "#2");
3583 Assert.AreEqual (10014, ex.ErrorCode, "#3");
3584 Assert.IsNull (ex.InnerException, "#4");
3585 Assert.IsNotNull (ex.Message, "#5");
3586 Assert.AreEqual (10014, ex.NativeErrorCode, "#6");
3587 Assert.AreEqual (SocketError.Fault, ex.SocketErrorCode, "#7");
3592 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Byte [])
3593 public void SetSocketOption1_Linger_Null ()
3595 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
3597 s.SetSocketOption (SocketOptionLevel.Socket,
3598 SocketOptionName.DontLinger, (byte []) null);
3600 } catch (SocketException ex) {
3601 // The system detected an invalid pointer address in attempting
3602 // to use a pointer argument in a call
3603 Assert.AreEqual (typeof (SocketException), ex.GetType (), "#2");
3604 Assert.AreEqual (10014, ex.ErrorCode, "#3");
3605 Assert.IsNull (ex.InnerException, "#4");
3606 Assert.IsNotNull (ex.Message, "#5");
3607 Assert.AreEqual (10014, ex.NativeErrorCode, "#6");
3608 Assert.AreEqual (SocketError.Fault, ex.SocketErrorCode, "#7");
3613 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Byte [])
3614 public void SetSocketOption1_Socket_Close ()
3616 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
3619 s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.DontLinger,
3620 new byte [] { 0x00 });
3622 } catch (ObjectDisposedException ex) {
3623 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
3624 Assert.IsNull (ex.InnerException, "#3");
3625 Assert.IsNotNull (ex.Message, "#4");
3626 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
3630 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Int32)
3631 public void SetSocketOption2_DontLinger ()
3633 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
3634 s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.DontLinger, 0);
3635 s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.DontLinger, 5);
3639 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Int32)
3640 [Category ("NotWorking")]
3641 public void SetSocketOption2_Linger ()
3643 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
3644 s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.Linger, 0);
3645 s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.Linger, 5);
3649 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Int32)
3650 public void SetSocketOption2_Socket_Closed ()
3652 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
3655 s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.DontLinger, 0);
3657 } catch (ObjectDisposedException ex) {
3658 // Cannot access a disposed object
3659 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
3660 Assert.IsNull (ex.InnerException, "#3");
3661 Assert.IsNotNull (ex.Message, "#4");
3662 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
3666 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
3667 public void SetSocketOption3_AddMembershipIPv4_IPv6MulticastOption ()
3669 IPAddress mcast_addr = IPAddress.Parse ("239.255.255.250");
3671 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp)) {
3672 s.Bind (new IPEndPoint (IPAddress.Any, 1901));
3674 s.SetSocketOption (SocketOptionLevel.IP, SocketOptionName.AddMembership,
3675 new IPv6MulticastOption (mcast_addr));
3677 } catch (ArgumentException ex) {
3678 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
3679 Assert.IsNull (ex.InnerException, "#3");
3680 Assert.IsNotNull (ex.Message, "#4");
3681 // The specified value is not a valid 'MulticastOption'
3682 Assert.IsTrue (ex.Message.IndexOf ("'MulticastOption'") != -1, "#5:" + ex.Message);
3683 Assert.AreEqual ("optionValue", ex.ParamName, "#6");
3688 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
3689 public void SetSocketOption3_AddMembershipIPv4_MulticastOption ()
3691 IPAddress mcast_addr = IPAddress.Parse ("239.255.255.250");
3693 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp)) {
3694 s.Bind (new IPEndPoint (IPAddress.Any, 1901));
3695 s.SetSocketOption (SocketOptionLevel.IP, SocketOptionName.AddMembership,
3696 new MulticastOption (mcast_addr));
3700 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
3701 [Category ("NotWorking")]
3702 public void SetSocketOption3_AddMembershipIPv4_Socket_NotBound ()
3704 IPAddress mcast_addr = IPAddress.Parse ("239.255.255.250");
3706 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
3708 s.SetSocketOption (SocketOptionLevel.IP, SocketOptionName.AddMembership,
3709 new MulticastOption (mcast_addr));
3711 } catch (SocketException ex) {
3712 // An invalid argument was supplied
3713 Assert.AreEqual (typeof (SocketException), ex.GetType (), "#2");
3714 Assert.AreEqual (10022, ex.ErrorCode, "#3");
3715 Assert.IsNull (ex.InnerException, "#4");
3716 Assert.IsNotNull (ex.Message, "#5");
3717 Assert.AreEqual (10022, ex.NativeErrorCode, "#6");
3718 Assert.AreEqual (SocketError.InvalidArgument, ex.SocketErrorCode, "#7");
3724 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
3725 public void SetSocketOption3_AddMembershipIPv6_IPv6MulticastOption ()
3727 if (!Socket.OSSupportsIPv6)
3728 Assert.Ignore ("IPv6 not enabled.");
3730 IPAddress mcast_addr = IPAddress.Parse ("ff02::1");
3732 using (Socket s = new Socket (AddressFamily.InterNetworkV6, SocketType.Dgram, ProtocolType.Udp)) {
3733 s.Bind (new IPEndPoint (IPAddress.IPv6Any, 1902));
3734 s.SetSocketOption (SocketOptionLevel.IPv6, SocketOptionName.AddMembership,
3735 new IPv6MulticastOption (mcast_addr));
3739 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
3740 public void SetSocketOption3_AddMembershipIPv6_MulticastOption ()
3742 if (!Socket.OSSupportsIPv6)
3743 Assert.Ignore ("IPv6 not enabled.");
3745 IPAddress mcast_addr = IPAddress.Parse ("ff02::1");
3747 using (Socket s = new Socket (AddressFamily.InterNetworkV6, SocketType.Dgram, ProtocolType.Udp)) {
3748 s.Bind (new IPEndPoint (IPAddress.IPv6Any, 1902));
3750 s.SetSocketOption (SocketOptionLevel.IPv6, SocketOptionName.AddMembership,
3751 new MulticastOption (mcast_addr));
3753 } catch (ArgumentException ex) {
3754 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
3755 Assert.IsNull (ex.InnerException, "#3");
3756 Assert.IsNotNull (ex.Message, "#4");
3757 // The specified value is not a valid 'IPv6MulticastOption'
3758 Assert.IsTrue (ex.Message.IndexOf ("'IPv6MulticastOption'") != -1, "#5:" + ex.Message);
3759 Assert.AreEqual ("optionValue", ex.ParamName, "#6");
3764 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
3765 [Category ("NotWorking")]
3766 public void SetSocketOption3_AddMembershipIPv6_Socket_NotBound ()
3768 IPAddress mcast_addr = IPAddress.Parse ("ff02::1");
3770 Socket s = new Socket (AddressFamily.InterNetworkV6, SocketType.Dgram, ProtocolType.Udp);
3772 s.SetSocketOption (SocketOptionLevel.IPv6, SocketOptionName.AddMembership,
3773 new IPv6MulticastOption (mcast_addr));
3775 } catch (SocketException ex) {
3776 // An invalid argument was supplied
3777 Assert.AreEqual (typeof (SocketException), ex.GetType (), "#2");
3778 Assert.AreEqual (10022, ex.ErrorCode, "#3");
3779 Assert.IsNull (ex.InnerException, "#4");
3780 Assert.IsNotNull (ex.Message, "#5");
3781 Assert.AreEqual (10022, ex.NativeErrorCode, "#6");
3782 Assert.AreEqual (SocketError.InvalidArgument, ex.SocketErrorCode, "#7");
3788 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
3789 public void SetSocketOption3_DontLinger_Boolean ()
3791 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
3793 s.SetSocketOption (SocketOptionLevel.Socket,
3794 SocketOptionName.DontLinger, (object) false);
3796 } catch (ArgumentException ex) {
3797 // The specified value is not valid
3798 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
3799 Assert.IsNull (ex.InnerException, "#3");
3800 Assert.IsNotNull (ex.Message, "#4");
3801 Assert.AreEqual ("optionValue", ex.ParamName, "#5");
3806 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
3807 public void SetSocketOption3_DontLinger_Int32 ()
3809 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
3811 s.SetSocketOption (SocketOptionLevel.Socket,
3812 SocketOptionName.DontLinger, (object) 0);
3814 } catch (ArgumentException ex) {
3815 // The specified value is not valid
3816 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
3817 Assert.IsNull (ex.InnerException, "#3");
3818 Assert.IsNotNull (ex.Message, "#4");
3819 Assert.AreEqual ("optionValue", ex.ParamName, "#5");
3824 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
3825 public void SetSocketOption3_DontLinger_LingerOption ()
3827 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
3829 s.SetSocketOption (SocketOptionLevel.Socket,
3830 SocketOptionName.DontLinger, new LingerOption (true, 1000));
3832 } catch (ArgumentException ex) {
3833 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
3834 Assert.IsNull (ex.InnerException, "#3");
3835 // The specified value is not valid
3836 Assert.IsNotNull (ex.Message, "#4");
3837 Assert.AreEqual ("optionValue", ex.ParamName, "#5");
3842 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
3843 public void SetSocketOption3_Linger_Boolean ()
3845 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
3847 s.SetSocketOption (SocketOptionLevel.Socket,
3848 SocketOptionName.Linger, (object) false);
3850 } catch (ArgumentException ex) {
3851 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
3852 Assert.IsNull (ex.InnerException, "#3");
3853 // The specified value is not valid
3854 Assert.IsNotNull (ex.Message, "#4");
3855 Assert.AreEqual ("optionValue", ex.ParamName, "#5");
3860 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
3861 public void SetSocketOption3_Linger_Int32 ()
3863 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
3865 s.SetSocketOption (SocketOptionLevel.Socket,
3866 SocketOptionName.Linger, (object) 0);
3868 } catch (ArgumentException ex) {
3869 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
3870 Assert.IsNull (ex.InnerException, "#3");
3871 // The specified value is not valid
3872 Assert.IsNotNull (ex.Message, "#4");
3873 Assert.AreEqual ("optionValue", ex.ParamName, "#5");
3878 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
3879 public void SetSocketOption3_Linger_LingerOption ()
3881 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
3882 s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.Linger,
3883 new LingerOption (false, 0));
3884 s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.Linger,
3885 new LingerOption (true, 0));
3886 s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.Linger,
3887 new LingerOption (false, 1000));
3888 s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.Linger,
3889 new LingerOption (true, 1000));
3893 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
3894 public void SetSocketOption3_DropMembershipIPv4_IPv6MulticastOption ()
3896 IPAddress mcast_addr = IPAddress.Parse ("239.255.255.250");
3898 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp)) {
3899 s.Bind (new IPEndPoint (IPAddress.Any, 1901));
3900 s.SetSocketOption (SocketOptionLevel.IP, SocketOptionName.AddMembership,
3901 new MulticastOption (mcast_addr));
3903 s.SetSocketOption (SocketOptionLevel.IP, SocketOptionName.DropMembership,
3904 new IPv6MulticastOption (mcast_addr));
3906 } catch (ArgumentException ex) {
3907 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
3908 Assert.IsNull (ex.InnerException, "#3");
3909 Assert.IsNotNull (ex.Message, "#4");
3910 // The specified value is not a valid 'MulticastOption'
3911 Assert.IsTrue (ex.Message.IndexOf ("'MulticastOption'") != -1, "#5:" + ex.Message);
3912 Assert.AreEqual ("optionValue", ex.ParamName, "#6");
3917 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
3918 public void SetSocketOption3_DropMembershipIPv4_MulticastOption ()
3920 IPAddress mcast_addr = IPAddress.Parse ("239.255.255.250");
3922 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp)) {
3923 MulticastOption option = new MulticastOption (mcast_addr);
3925 s.Bind (new IPEndPoint (IPAddress.Any, 1901));
3926 s.SetSocketOption (SocketOptionLevel.IP, SocketOptionName.AddMembership,
3928 s.SetSocketOption (SocketOptionLevel.IP, SocketOptionName.DropMembership,
3933 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
3934 [Category ("NotWorking")]
3935 public void SetSocketOption3_DropMembershipIPv4_Socket_NotBound ()
3937 IPAddress mcast_addr = IPAddress.Parse ("239.255.255.250");
3939 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
3941 s.SetSocketOption (SocketOptionLevel.IP, SocketOptionName.DropMembership,
3942 new MulticastOption (mcast_addr));
3944 } catch (SocketException ex) {
3945 // An invalid argument was supplied
3946 Assert.AreEqual (typeof (SocketException), ex.GetType (), "#2");
3947 Assert.AreEqual (10022, ex.ErrorCode, "#3");
3948 Assert.IsNull (ex.InnerException, "#4");
3949 Assert.IsNotNull (ex.Message, "#5");
3950 Assert.AreEqual (10022, ex.NativeErrorCode, "#6");
3951 Assert.AreEqual (SocketError.InvalidArgument, ex.SocketErrorCode, "#7");
3957 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
3958 public void SetSocketOption3_DropMembershipIPv6_IPv6MulticastOption ()
3960 if (!Socket.OSSupportsIPv6)
3961 Assert.Ignore ("IPv6 not enabled.");
3963 using (Socket s = new Socket (AddressFamily.InterNetworkV6, SocketType.Dgram, ProtocolType.Udp)) {
3964 IPv6MulticastOption option = new IPv6MulticastOption (
3965 IPAddress.Parse ("ff02::1"));
3967 s.Bind (new IPEndPoint (IPAddress.IPv6Any, 1902));
3968 s.SetSocketOption (SocketOptionLevel.IPv6, SocketOptionName.AddMembership,
3970 s.SetSocketOption (SocketOptionLevel.IPv6, SocketOptionName.DropMembership,
3975 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
3976 public void SetSocketOption3_DropMembershipIPv6_MulticastOption ()
3978 if (!Socket.OSSupportsIPv6)
3979 Assert.Ignore ("IPv6 not enabled.");
3981 IPAddress mcast_addr = IPAddress.Parse ("ff02::1");
3983 using (Socket s = new Socket (AddressFamily.InterNetworkV6, SocketType.Dgram, ProtocolType.Udp)) {
3984 s.Bind (new IPEndPoint (IPAddress.IPv6Any, 1902));
3985 s.SetSocketOption (SocketOptionLevel.IPv6, SocketOptionName.AddMembership,
3986 new IPv6MulticastOption (mcast_addr));
3988 s.SetSocketOption (SocketOptionLevel.IPv6, SocketOptionName.DropMembership,
3989 new MulticastOption (mcast_addr));
3991 } catch (ArgumentException ex) {
3992 Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
3993 Assert.IsNull (ex.InnerException, "#3");
3994 Assert.IsNotNull (ex.Message, "#4");
3995 // The specified value is not a valid 'IPv6MulticastOption'
3996 Assert.IsTrue (ex.Message.IndexOf ("'IPv6MulticastOption'") != -1, "#5:" + ex.Message);
3997 Assert.AreEqual ("optionValue", ex.ParamName, "#6");
4002 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
4003 [Category ("NotWorking")]
4004 public void SetSocketOption3_DropMembershipIPv6_Socket_NotBound ()
4006 IPAddress mcast_addr = IPAddress.Parse ("ff02::1");
4008 Socket s = new Socket (AddressFamily.InterNetworkV6, SocketType.Dgram, ProtocolType.Udp);
4010 s.SetSocketOption (SocketOptionLevel.IPv6, SocketOptionName.DropMembership,
4011 new IPv6MulticastOption (mcast_addr));
4013 } catch (SocketException ex) {
4014 // An invalid argument was supplied
4015 Assert.AreEqual (typeof (SocketException), ex.GetType (), "#2");
4016 Assert.AreEqual (10022, ex.ErrorCode, "#3");
4017 Assert.IsNull (ex.InnerException, "#4");
4018 Assert.IsNotNull (ex.Message, "#5");
4019 Assert.AreEqual (10022, ex.NativeErrorCode, "#6");
4020 Assert.AreEqual (SocketError.InvalidArgument, ex.SocketErrorCode, "#7");
4026 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
4027 public void SetSocketOption3_OptionValue_Null ()
4029 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
4031 s.SetSocketOption (SocketOptionLevel.Socket,
4032 SocketOptionName.Linger, (object) null);
4034 } catch (ArgumentNullException ex) {
4035 Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
4036 Assert.IsNull (ex.InnerException, "#3");
4037 Assert.IsNotNull (ex.Message, "#4");
4038 Assert.AreEqual ("optionValue", ex.ParamName, "#5");
4043 [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
4044 public void SetSocketOption3_Socket_Closed ()
4046 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
4049 s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.Linger,
4050 new LingerOption (false, 0));
4052 } catch (ObjectDisposedException ex) {
4053 // Cannot access a disposed object
4054 Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
4055 Assert.IsNull (ex.InnerException, "#3");
4056 Assert.IsNotNull (ex.Message, "#4");
4057 Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
4062 public void SetSocketOption_MulticastInterfaceIndex_Any ()
4064 IPAddress ip = IPAddress.Parse ("239.255.255.250");
4066 using (Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp))
4068 s.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.MulticastInterface, IPAddress.HostToNetworkOrder(index));
4069 s.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership, new MulticastOption(ip, index));
4074 public void SetSocketOption_MulticastInterfaceIndex_Loopback ()
4076 IPAddress ip = IPAddress.Parse ("239.255.255.250");
4078 using (Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp))
4080 s.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.MulticastInterface, IPAddress.HostToNetworkOrder(index));
4081 s.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership, new MulticastOption(ip, index));
4086 public void SetSocketOption_MulticastInterfaceIndex_Invalid ()
4088 IPAddress ip = IPAddress.Parse ("239.255.255.250");
4090 using (Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp))
4094 s.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.MulticastInterface, IPAddress.HostToNetworkOrder(index));
4101 s.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership, new MulticastOption(ip, index));
4110 public void Shutdown_NoConnect ()
4112 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
4113 s.Bind (new IPEndPoint (IPAddress.Loopback, 0));
4116 s.Shutdown (SocketShutdown.Both);
4118 } catch (SocketException exc) {
4119 Assert.AreEqual (10057, exc.ErrorCode, "#2");
4126 [ExpectedException (typeof (NullReferenceException))]
4127 public void ReceiveAsync_Null ()
4129 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
4130 s.ReceiveAsync (null);
4135 [ExpectedException (typeof (NullReferenceException))]
4136 public void ReceiveAsync_Default ()
4138 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
4139 SocketAsyncEventArgs saea = new SocketAsyncEventArgs ();
4140 s.ReceiveAsync (saea);
4146 [ExpectedException (typeof (NullReferenceException))]
4147 public void ReceiveAsync_NullBuffer ()
4149 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
4150 SocketAsyncEventArgs saea = new SocketAsyncEventArgs ();
4151 saea.SetBuffer (null, 0, 0);
4152 s.ReceiveAsync (null);
4157 [ExpectedException (typeof (ObjectDisposedException))]
4158 public void ReceiveAsync_ClosedSocket ()
4160 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
4162 s.ReceiveAsync (null);
4166 [ExpectedException (typeof (NullReferenceException))]
4167 public void SendAsync_Null ()
4169 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
4175 [ExpectedException (typeof (NullReferenceException))]
4176 public void SendAsync_Default ()
4178 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
4179 SocketAsyncEventArgs saea = new SocketAsyncEventArgs ();
4186 [ExpectedException (typeof (NullReferenceException))]
4187 public void SendAsync_NullBuffer ()
4189 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
4190 SocketAsyncEventArgs saea = new SocketAsyncEventArgs ();
4191 saea.SetBuffer (null, 0, 0);
4197 [ExpectedException (typeof (ObjectDisposedException))]
4198 public void SendAsync_ClosedSocket ()
4200 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
4206 public void SendAsyncFile ()
4208 Socket serverSocket = StartSocketServer ();
4210 Socket clientSocket = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
4211 clientSocket.Connect (serverSocket.LocalEndPoint);
4212 clientSocket.NoDelay = true;
4214 // Initialize buffer used to create testing file
4215 var buffer = new byte [1024];
4216 for (int i = 0; i < 1024; ++i)
4217 buffer [i] = (byte) (i % 256);
4219 string temp = Path.GetTempFileName ();
4221 // Testing file creation
4222 using (StreamWriter sw = new StreamWriter (temp)) {
4226 var m = new ManualResetEvent (false);
4228 // Async Send File to server
4229 clientSocket.BeginSendFile(temp, (ar) => {
4230 Socket client = (Socket) ar.AsyncState;
4231 client.EndSendFile (ar);
4235 if (!m.WaitOne (1500))
4236 throw new TimeoutException ();
4239 if (File.Exists (temp))
4242 clientSocket.Close ();
4243 serverSocket.Close ();
4247 Socket StartSocketServer ()
4250 Socket listenSocket = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
4252 listenSocket.Bind (new IPEndPoint (IPAddress.Loopback, 8001));
4253 listenSocket.Listen (1);
4255 listenSocket.BeginAccept (new AsyncCallback (ReceiveCallback), listenSocket);
4257 return listenSocket;
4260 public static void ReceiveCallback (IAsyncResult AsyncCall)
4262 byte[] bytes = new byte [1024];
4264 Socket listener = (Socket)AsyncCall.AsyncState;
4265 Socket client = listener.EndAccept (AsyncCall);
4267 client.Receive (bytes, bytes.Length, 0);