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;
22 namespace MonoTests.System.Net.Sockets
25 public class SocketTest
27 // note: also used in SocketCas tests
28 public const string BogusAddress = "192.168.244.244";
29 public const int BogusPort = 23483;
32 public void ConnectIPAddressAny ()
34 IPEndPoint ep = new IPEndPoint (IPAddress.Any, 0);
37 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp)) {
42 } catch (SocketException ex) {
43 Assert.AreEqual (10049, ex.ErrorCode, "#2");
47 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
52 } catch (SocketException ex) {
53 Assert.AreEqual (10049, ex.ErrorCode, "#4");
58 [Ignore ("Bug #75158")]
59 public void IncompatibleAddress ()
61 IPEndPoint epIPv6 = new IPEndPoint (IPAddress.IPv6Any,
65 using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP)) {
70 } catch (SocketException ex) {
73 int expectedError = 10022;
75 // address incompatible with protocol
76 int expectedError = 10047;
78 Assert.AreEqual (expectedError, ex.ErrorCode,
84 [Category ("InetAccess")]
85 public void EndConnect ()
87 IPAddress ipOne = IPAddress.Parse (BogusAddress);
88 IPEndPoint ipEP = new IPEndPoint (ipOne, BogusPort);
89 Socket sock = new Socket (ipEP.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
90 IAsyncResult ar = sock.BeginConnect (ipEP, null, null);
93 // should raise an exception because connect was bogus
96 } catch (SocketException ex) {
97 Assert.AreEqual (10060, ex.ErrorCode, "#2");
102 [ExpectedException (typeof (ArgumentNullException))]
103 public void SelectEmpty ()
105 ArrayList list = new ArrayList ();
106 Socket.Select (list, list, list, 1000);
109 private bool BlockingConnect (bool block)
111 IPEndPoint ep = new IPEndPoint(IPAddress.Loopback, 1234);
112 Socket server = new Socket(AddressFamily.InterNetwork,
116 server.Blocking=block;
120 Socket conn = new Socket (AddressFamily.InterNetwork,
125 Socket client = server.Accept();
126 bool client_block = client.Blocking;
132 return(client_block);
136 public void AcceptBlockingStatus()
140 block = BlockingConnect(true);
141 Assertion.AssertEquals ("BlockingStatus01",
144 block = BlockingConnect(false);
145 Assertion.AssertEquals ("BlockingStatus02",
149 static bool CFAConnected = false;
150 static ManualResetEvent CFACalledBack;
152 private static void CFACallback (IAsyncResult asyncResult)
154 Socket sock = (Socket)asyncResult.AsyncState;
155 CFAConnected = sock.Connected;
157 if (sock.Connected) {
158 sock.EndConnect (asyncResult);
161 CFACalledBack.Set ();
165 public void ConnectFailAsync ()
167 Socket sock = new Socket (AddressFamily.InterNetwork,
170 sock.Blocking = false;
171 CFACalledBack = new ManualResetEvent (false);
172 CFACalledBack.Reset ();
174 /* Need a port that is not being used for
177 sock.BeginConnect (new IPEndPoint (IPAddress.Loopback,
179 new AsyncCallback (CFACallback),
181 CFACalledBack.WaitOne ();
183 Assertion.AssertEquals ("ConnectFail", CFAConnected,
190 [ExpectedException (typeof (ArgumentException))]
192 public void SetSocketOptionBoolean ()
194 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 1);
195 Socket sock = new Socket (ep.Address.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
197 sock.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.KeepAlive, true);
204 public void TestSelect1 ()
206 Socket srv = CreateServer ();
207 ClientSocket clnt = new ClientSocket (srv.LocalEndPoint);
208 Thread th = new Thread (new ThreadStart (clnt.ConnectSleepClose));
214 ArrayList list = new ArrayList ();
215 ArrayList empty = new ArrayList ();
217 Socket.Select (list, empty, empty, 100);
218 Assertion.AssertEquals ("#01", 0, empty.Count);
219 Assertion.AssertEquals ("#02", 1, list.Count);
220 Socket.Select (empty, list, empty, 100);
221 Assertion.AssertEquals ("#03", 0, empty.Count);
222 Assertion.AssertEquals ("#04", 1, list.Count);
223 Socket.Select (list, empty, empty, -1);
224 Assertion.AssertEquals ("#05", 0, empty.Count);
225 Assertion.AssertEquals ("#06", 1, list.Count);
226 // Need to read the 10 bytes from the client to avoid a RST
227 byte [] bytes = new byte [10];
236 static Socket CreateServer ()
238 Socket sock = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
239 sock.Bind (new IPEndPoint (IPAddress.Loopback, 0));
248 public ClientSocket (EndPoint ep)
251 sock = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
254 public void ConnectSleepClose ()
263 byte [] b = new byte [10];
268 byte[] buf = new byte[100];
271 [ExpectedException (typeof (ObjectDisposedException))]
272 public void Disposed1 ()
274 Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
275 EndPoint ep = new IPEndPoint (IPAddress.Any, 31337);
278 s.ReceiveFrom (buf, ref ep);
282 [ExpectedException (typeof (ObjectDisposedException))]
283 public void Disposed2 ()
285 Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
292 [ExpectedException (typeof (ObjectDisposedException))]
293 public void Disposed3 ()
295 Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
298 s.GetSocketOption (0, 0);
302 [ExpectedException (typeof (ObjectDisposedException))]
303 public void Disposed4 ()
305 Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
308 s.GetSocketOption (0, 0, null);
312 [ExpectedException (typeof (ObjectDisposedException))]
313 public void Disposed5 ()
315 Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
318 s.GetSocketOption (0, 0, 0);
322 [ExpectedException (typeof (ObjectDisposedException))]
323 public void Disposed6 ()
325 Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
332 [ExpectedException (typeof (ObjectDisposedException))]
333 public void Disposed7 ()
335 Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
342 [ExpectedException (typeof (ObjectDisposedException))]
343 public void Disposed8 ()
345 Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
352 [ExpectedException (typeof (ObjectDisposedException))]
353 public void Disposed9 ()
355 Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
362 [ExpectedException (typeof (ObjectDisposedException))]
363 public void Disposed10 ()
365 Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
368 s.Receive (buf, 10, 0);
372 [ExpectedException (typeof (ObjectDisposedException))]
373 public void Disposed11 ()
375 Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
376 EndPoint ep = new IPEndPoint (IPAddress.Any, 31337);
379 s.Receive (buf, 0, 10, 0);
383 [ExpectedException (typeof (ObjectDisposedException))]
384 public void Disposed12 ()
386 Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
387 EndPoint ep = new IPEndPoint (IPAddress.Any, 31337);
390 s.ReceiveFrom (buf, 0, ref ep);
394 [ExpectedException (typeof (ObjectDisposedException))]
395 public void Disposed13 ()
397 Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
398 EndPoint ep = new IPEndPoint (IPAddress.Any, 31337);
401 s.ReceiveFrom (buf, 10, 0, ref ep);
405 [ExpectedException (typeof (ObjectDisposedException))]
406 public void Disposed14 ()
408 Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
409 EndPoint ep = new IPEndPoint (IPAddress.Any, 31337);
412 s.ReceiveFrom (buf, 0, 10, 0, ref ep);
416 [ExpectedException (typeof (ObjectDisposedException))]
417 public void Disposed15 ()
419 Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
426 [ExpectedException (typeof (ObjectDisposedException))]
427 public void Disposed16 ()
429 Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
436 [ExpectedException (typeof (ObjectDisposedException))]
437 public void Disposed17 ()
439 Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
446 [ExpectedException (typeof (ObjectDisposedException))]
447 public void Disposed18 ()
449 Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
450 EndPoint ep = new IPEndPoint (IPAddress.Any, 31337);
453 s.Send (buf, 0, 10, 0);
457 [ExpectedException (typeof (ObjectDisposedException))]
458 public void Disposed19 ()
460 Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
461 EndPoint ep = new IPEndPoint (IPAddress.Any, 31337);
464 s.SendTo (buf, 0, ep);
468 [ExpectedException (typeof (ObjectDisposedException))]
469 public void Disposed20 ()
471 Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
472 EndPoint ep = new IPEndPoint (IPAddress.Any, 31337);
475 s.SendTo (buf, 10, 0, ep);
479 [ExpectedException (typeof (ObjectDisposedException))]
480 public void Disposed21 ()
482 Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
483 EndPoint ep = new IPEndPoint (IPAddress.Any, 31337);
486 s.SendTo (buf, 0, 10, 0, ep);
490 [ExpectedException (typeof (ObjectDisposedException))]
491 public void Disposed22 ()
493 Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
494 EndPoint ep = new IPEndPoint (IPAddress.Any, 31337);
501 [ExpectedException (typeof (ObjectDisposedException))]
502 public void Disposed23 ()
504 Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
505 EndPoint ep = new IPEndPoint (IPAddress.Any, 31337);
512 public void GetHashCodeTest ()
514 Socket server = new Socket (AddressFamily.InterNetwork,
515 SocketType.Stream, ProtocolType.Tcp);
516 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
521 Socket client = new Socket (AddressFamily.InterNetwork,
522 SocketType.Stream, ProtocolType.Tcp);
523 int hashcodeA = client.GetHashCode ();
525 int hashcodeB = client.GetHashCode ();
526 Assert.AreEqual (hashcodeA, hashcodeB, "#1");
528 int hashcodeC = client.GetHashCode ();
530 Assert.AreEqual (hashcodeB, hashcodeC, "#2");
532 Assert.IsFalse (hashcodeB == hashcodeC, "#2");
537 static ManualResetEvent SocketError_event = new ManualResetEvent (false);
539 private static void SocketError_callback (IAsyncResult ar)
541 Socket sock = (Socket)ar.AsyncState;
544 sock.EndConnect (ar);
547 SocketError_event.Set ();
551 public void SocketError ()
553 Socket sock = new Socket (AddressFamily.InterNetwork,
556 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
559 SocketError_event.Reset ();
561 sock.Blocking = false;
562 sock.BeginConnect (ep, new AsyncCallback(SocketError_callback),
565 if (SocketError_event.WaitOne (2000, false) == false) {
566 Assert.Fail ("SocketError wait timed out");
569 Assertion.AssertEquals ("SocketError #1", false,
574 error = (int)sock.GetSocketOption (SocketOptionLevel.Socket, SocketOptionName.Error);
575 Assertion.AssertEquals ("SocketError #2", 10061,
578 error = (int)sock.GetSocketOption (SocketOptionLevel.Socket, SocketOptionName.Error);
579 Assertion.AssertEquals ("SocketError #3", 10061,
588 public void SocketInformationCtor ()
593 public void DontFragmentDefaultTcp ()
595 Socket sock = new Socket (AddressFamily.InterNetwork,
599 Assertion.AssertEquals ("DontFragmentDefaultTcp",
600 false, sock.DontFragment);
606 [Category ("NotOnMac")] // DontFragment doesn't work on Mac
607 public void DontFragmentChangeTcp ()
609 Socket sock = new Socket (AddressFamily.InterNetwork,
613 sock.DontFragment = true;
615 Assertion.AssertEquals ("DontFragmentChangeTcp",
616 true, sock.DontFragment);
622 public void DontFragmentDefaultUdp ()
624 Socket sock = new Socket (AddressFamily.InterNetwork,
628 Assertion.AssertEquals ("DontFragmentDefaultUdp",
629 false, sock.DontFragment);
635 [Category ("NotOnMac")] // DontFragment doesn't work on Mac
636 public void DontFragmentChangeUdp ()
638 Socket sock = new Socket (AddressFamily.InterNetwork,
642 sock.DontFragment = true;
644 Assertion.AssertEquals ("DontFragmentChangeUdp",
645 true, sock.DontFragment);
651 [ExpectedException (typeof(ObjectDisposedException))]
652 public void DontFragmentClosed ()
654 Socket sock = new Socket (AddressFamily.InterNetwork,
660 bool val = sock.DontFragment;
664 [Category ("NotWorking")] // Need to pick a non-IP AddressFamily that "works" on both mono and ms, this one only works on ms
665 public void DontFragment ()
667 Socket sock = new Socket (AddressFamily.NetBios,
668 SocketType.Seqpacket,
669 ProtocolType.Unspecified);
672 sock.DontFragment = true;
673 Assert.Fail ("DontFragment #1");
674 } catch (NotSupportedException) {
676 Assert.Fail ("DontFragment #2");
683 public void EnableBroadcastDefaultTcp ()
685 Socket sock = new Socket (AddressFamily.InterNetwork,
690 bool value = sock.EnableBroadcast;
691 Assert.Fail ("EnableBroadcastDefaultTcp #1");
692 } catch (SocketException ex) {
693 Assert.AreEqual (10042, ex.ErrorCode, "EnableBroadcastDefaultTcp #2");
695 Assert.Fail ("EnableBroadcastDefaultTcp #2");
702 public void EnableBroadcastDefaultUdp ()
704 Socket sock = new Socket (AddressFamily.InterNetwork,
708 Assertion.AssertEquals ("EnableBroadcastDefaultUdp",
709 false, sock.EnableBroadcast);
715 public void EnableBroadcastChangeTcp ()
717 Socket sock = new Socket (AddressFamily.InterNetwork,
722 sock.EnableBroadcast = true;
723 Assert.Fail ("EnableBroadcastChangeTcp #1");
724 } catch (SocketException ex) {
725 Assert.AreEqual (10042, ex.ErrorCode, "EnableBroadcastChangeTcp #2");
727 Assert.Fail ("EnableBroadcastChangeTcp #2");
734 public void EnableBroadcastChangeUdp ()
736 Socket sock = new Socket (AddressFamily.InterNetwork,
740 sock.EnableBroadcast = true;
742 Assertion.AssertEquals ("EnableBroadcastChangeUdp",
743 true, sock.EnableBroadcast);
749 [ExpectedException (typeof(ObjectDisposedException))]
750 public void EnableBroadcastClosed ()
752 Socket sock = new Socket (AddressFamily.InterNetwork,
758 bool val = sock.EnableBroadcast;
761 /* Can't test the default for ExclusiveAddressUse as
762 * it's different on different versions and service
766 [Category ("NotWorking")] // Not supported on Linux
767 public void ExclusiveAddressUseUnbound ()
769 Socket sock = new Socket (AddressFamily.InterNetwork,
773 sock.ExclusiveAddressUse = true;
775 Assertion.AssertEquals ("ExclusiveAddressUseUnbound",
777 sock.ExclusiveAddressUse);
783 [ExpectedException (typeof(InvalidOperationException))]
784 [Category ("NotWorking")] // Not supported on Linux
785 public void ExclusiveAddressUseBound ()
787 Socket sock = new Socket (AddressFamily.InterNetwork,
791 sock.Bind (new IPEndPoint (IPAddress.Any, 1235));
792 sock.ExclusiveAddressUse = true;
797 [ExpectedException (typeof(ObjectDisposedException))]
798 public void ExclusiveAddressUseClosed ()
800 Socket sock = new Socket (AddressFamily.InterNetwork,
806 bool val = sock.ExclusiveAddressUse;
810 public void IsBoundTcp ()
812 Socket sock = new Socket (AddressFamily.InterNetwork,
815 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
818 Assertion.AssertEquals ("IsBoundTcp #1", false,
822 Assertion.AssertEquals ("IsBoundTcp #2", true,
827 Socket sock2 = new Socket (AddressFamily.InterNetwork,
831 Assertion.AssertEquals ("IsBoundTcp #3", false,
835 Assertion.AssertEquals ("IsBoundTcp #4", true,
839 Assertion.AssertEquals ("IsBoundTcp #5", true,
843 Assertion.AssertEquals ("IsBoundTcp #6", true,
848 public void IsBoundUdp ()
850 Socket sock = new Socket (AddressFamily.InterNetwork,
853 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
856 Assertion.AssertEquals ("IsBoundUdp #1", false,
860 Assertion.AssertEquals ("IsBoundUdp #2", true,
864 Assertion.AssertEquals ("IsBoundUdp #3", true,
868 sock = new Socket (AddressFamily.InterNetwork,
872 Assertion.AssertEquals ("IsBoundUdp #4", false,
876 Assertion.AssertEquals ("IsBoundUdp #5", true,
880 Assertion.AssertEquals ("IsBoundUdp #6", true,
885 /* Should not throw an exception */
886 public void IsBoundClosed ()
888 Socket sock = new Socket (AddressFamily.InterNetwork,
894 bool val = sock.IsBound;
897 /* Nothing much to test for LingerState */
900 public void MulticastLoopbackDefaultTcp ()
902 Socket sock = new Socket (AddressFamily.InterNetwork,
907 bool value = sock.MulticastLoopback;
908 Assert.Fail ("MulticastLoopbackDefaultTcp #1");
909 } catch (SocketException ex) {
910 Assert.AreEqual (10042, ex.ErrorCode, "MulticastLoopbackDefaultTcp #2");
912 Assert.Fail ("MulticastLoopbackDefaultTcp #2");
919 public void MulticastLoopbackChangeTcp ()
921 Socket sock = new Socket (AddressFamily.InterNetwork,
926 sock.MulticastLoopback = false;
927 Assert.Fail ("MulticastLoopbackChangeTcp #1");
928 } catch (SocketException ex) {
929 Assert.AreEqual (10042, ex.ErrorCode, "MulticastLoopbackChangeTcp #2");
931 Assert.Fail ("MulticastLoopbackChangeTcp #2");
938 public void MulticastLoopbackDefaultUdp ()
940 Socket sock = new Socket (AddressFamily.InterNetwork,
944 Assertion.AssertEquals ("MulticastLoopbackDefaultUdp",
945 true, sock.MulticastLoopback);
951 public void MulticastLoopbackChangeUdp ()
953 Socket sock = new Socket (AddressFamily.InterNetwork,
957 sock.MulticastLoopback = false;
959 Assertion.AssertEquals ("MulticastLoopbackChangeUdp",
960 false, sock.MulticastLoopback);
966 [ExpectedException (typeof(ObjectDisposedException))]
967 public void MulticastLoopbackClosed ()
969 Socket sock = new Socket (AddressFamily.InterNetwork,
975 bool val = sock.MulticastLoopback;
978 /* OSSupportsIPv6 depends on the environment */
981 [Category("NotWorking")] // We have different defaults for perf reasons
982 public void ReceiveBufferSizeDefault ()
984 Socket sock = new Socket (AddressFamily.InterNetwork,
988 Assertion.AssertEquals ("ReceiveBufferSizeDefault",
989 8192, sock.ReceiveBufferSize);
995 [Category("NotWorking")] // We have different defaults for perf reasons
996 public void ReceiveBufferSizeDefaultUdp ()
998 Socket sock = new Socket (AddressFamily.InterNetwork,
1002 Assertion.AssertEquals ("ReceiveBufferSizeDefaultUdp",
1003 8192, sock.ReceiveBufferSize);
1009 public void ReceiveBufferSizeChange ()
1011 Socket sock = new Socket (AddressFamily.InterNetwork,
1015 sock.ReceiveBufferSize = 16384;
1017 Assertion.AssertEquals ("ReceiveBufferSizeChange",
1018 16384, sock.ReceiveBufferSize);
1024 [ExpectedException (typeof(ObjectDisposedException))]
1025 public void ReceiveBufferSizeClosed ()
1027 Socket sock = new Socket (AddressFamily.InterNetwork,
1033 int val = sock.ReceiveBufferSize;
1037 [Category("NotWorking")] // We have different defaults for perf reasons
1038 public void SendBufferSizeDefault ()
1040 Socket sock = new Socket (AddressFamily.InterNetwork,
1044 Assertion.AssertEquals ("SendBufferSizeDefault",
1045 8192, sock.SendBufferSize);
1051 [Category("NotWorking")] // We have different defaults for perf reasons
1052 public void SendBufferSizeDefaultUdp ()
1054 Socket sock = new Socket (AddressFamily.InterNetwork,
1058 Assertion.AssertEquals ("SendBufferSizeDefaultUdp",
1059 8192, sock.SendBufferSize);
1065 public void SendBufferSizeChange ()
1067 Socket sock = new Socket (AddressFamily.InterNetwork,
1071 sock.SendBufferSize = 16384;
1073 Assertion.AssertEquals ("SendBufferSizeChange",
1074 16384, sock.SendBufferSize);
1080 [ExpectedException (typeof(ObjectDisposedException))]
1081 public void SendBufferSizeClosed ()
1083 Socket sock = new Socket (AddressFamily.InterNetwork,
1089 int val = sock.SendBufferSize;
1092 /* No test for TTL default as it's platform dependent */
1094 public void TtlChange ()
1096 Socket sock = new Socket (AddressFamily.InterNetwork,
1102 Assertion.AssertEquals ("TtlChange", 255, sock.Ttl);
1108 [Category ("NotOnMac")] // Mac doesn't throw when overflowing the ttl
1109 public void TtlChangeOverflow ()
1111 Socket sock = new Socket (AddressFamily.InterNetwork,
1117 Assert.Fail ("TtlChangeOverflow #1");
1118 } catch (SocketException ex) {
1119 Assert.AreEqual (10022, ex.ErrorCode,
1120 "TtlChangeOverflow #2");
1122 Assert.Fail ("TtlChangeoverflow #3");
1128 /* Apparently you can set TTL=0 on the ms runtime!!
1131 Assert.Fail ("TtlChangeOverflow #4");
1132 } catch (SocketException ex) {
1133 Assert.AreEqual (10022, ex.ErrorCode,
1134 "TtlChangeOverflow #5");
1136 Assert.Fail ("TtlChangeOverflow #6");
1143 [ExpectedException (typeof(ObjectDisposedException))]
1144 public void TtlClosed ()
1146 Socket sock = new Socket (AddressFamily.InterNetwork,
1156 public void UseOnlyOverlappedIODefault ()
1158 Socket sock = new Socket (AddressFamily.InterNetwork,
1162 Assertion.AssertEquals ("UseOnlyOverlappedIODefault",
1164 sock.UseOnlyOverlappedIO);
1170 // We need this because the Linux kernel in certain configurations
1171 // will end up rounding up the values passed on to the kernel
1172 // for socket send/receive timeouts.
1174 int Approximate (int target, int value)
1178 if (value > target-10 && value < target+10)
1184 public void UseOnlyOverlappedIOChange ()
1186 Socket sock = new Socket (AddressFamily.InterNetwork,
1190 sock.UseOnlyOverlappedIO = true;
1192 Assertion.AssertEquals ("UseOnlyOverlappedIOChange",
1194 sock.UseOnlyOverlappedIO);
1200 /* Should not throw an exception */
1201 public void UseOnlyOverlappedIOClosed ()
1203 Socket sock = new Socket (AddressFamily.InterNetwork,
1209 bool val = sock.UseOnlyOverlappedIO;
1213 public void SendTimeoutDefault ()
1215 Socket sock = new Socket (AddressFamily.InterNetwork,
1219 Assertion.AssertEquals ("SendTimeoutDefault",
1220 0, sock.SendTimeout);
1226 public void SendTimeoutChange ()
1228 Socket sock = new Socket (AddressFamily.InterNetwork,
1232 /* Should be rounded up to 500, according to
1233 * the MSDN docs, but the MS runtime doesn't
1235 sock.SendTimeout = 50;
1236 Assertion.AssertEquals ("SendTimeoutChange #1",
1237 50, Approximate (50, sock.SendTimeout));
1239 sock.SendTimeout = 2000;
1240 Assertion.AssertEquals ("SendTimeoutChange #2",
1241 2000, Approximate (2000, sock.SendTimeout));
1243 sock.SendTimeout = 0;
1244 Assertion.AssertEquals ("SendTimeoutChange #3",
1245 0, Approximate (0, sock.SendTimeout));
1247 /* Should be the same as setting 0 */
1248 sock.SendTimeout = -1;
1249 Assertion.AssertEquals ("SendTimeoutChange #4",
1250 0, sock.SendTimeout);
1252 sock.SendTimeout = 65536;
1253 Assertion.AssertEquals ("SendTimeoutChange #5",
1254 65536, Approximate (65536, sock.SendTimeout));
1257 sock.SendTimeout = -2;
1258 Assert.Fail ("SendTimeoutChange #8");
1259 } catch (ArgumentOutOfRangeException) {
1261 Assert.Fail ("SendTimeoutChange #9");
1268 [ExpectedException (typeof(ObjectDisposedException))]
1269 public void SendTimeoutClosed ()
1271 Socket sock = new Socket (AddressFamily.InterNetwork,
1277 int val = sock.SendTimeout;
1281 public void ReceiveTimeoutDefault ()
1283 Socket sock = new Socket (AddressFamily.InterNetwork,
1287 Assertion.AssertEquals ("ReceiveTimeoutDefault",
1288 0, sock.ReceiveTimeout);
1294 public void ReceiveTimeoutChange ()
1296 Socket sock = new Socket (AddressFamily.InterNetwork,
1300 sock.ReceiveTimeout = 50;
1301 Assertion.AssertEquals ("ReceiveTimeoutChange #1",
1302 50, Approximate (50, sock.ReceiveTimeout));
1304 sock.ReceiveTimeout = 2000;
1305 Assertion.AssertEquals ("ReceiveTimeoutChange #2",
1306 2000, Approximate (2000, sock.ReceiveTimeout));
1308 sock.ReceiveTimeout = 0;
1309 Assertion.AssertEquals ("ReceiveTimeoutChange #3",
1310 0, sock.ReceiveTimeout);
1312 /* Should be the same as setting 0 */
1313 sock.ReceiveTimeout = -1;
1314 Assertion.AssertEquals ("ReceiveTimeoutChange #4",
1315 0, sock.ReceiveTimeout);
1317 sock.ReceiveTimeout = 65536;
1318 Assertion.AssertEquals ("ReceiveTimeoutChange #5",
1319 65536, Approximate (65536, sock.ReceiveTimeout));
1322 sock.ReceiveTimeout = -2;
1323 Assert.Fail ("ReceiveTimeoutChange #8");
1324 } catch (ArgumentOutOfRangeException) {
1326 Assert.Fail ("ReceiveTimeoutChange #9");
1333 [ExpectedException (typeof(ObjectDisposedException))]
1334 public void ReceiveTimeoutClosed ()
1336 Socket sock = new Socket (AddressFamily.InterNetwork,
1342 int val = sock.ReceiveTimeout;
1346 public void NoDelayDefaultTcp ()
1348 Socket sock = new Socket (AddressFamily.InterNetwork,
1352 Assertion.AssertEquals ("NoDelayDefaultTcp", false,
1359 public void NoDelayChangeTcp ()
1361 Socket sock = new Socket (AddressFamily.InterNetwork,
1365 sock.NoDelay = true;
1367 Assertion.AssertEquals ("NoDelayChangeTcp", true,
1374 public void NoDelayDefaultUdp ()
1376 Socket sock = new Socket (AddressFamily.InterNetwork,
1381 bool val = sock.NoDelay;
1382 Assert.Fail ("NoDelayDefaultUdp #1");
1383 } catch (SocketException ex) {
1384 Assert.AreEqual (10042, ex.ErrorCode,
1385 "NoDelayDefaultUdp #2");
1387 Assert.Fail ("NoDelayDefaultUdp #3");
1394 public void NoDelayChangeUdp ()
1396 Socket sock = new Socket (AddressFamily.InterNetwork,
1401 sock.NoDelay = true;
1402 Assert.Fail ("NoDelayChangeUdp #1");
1403 } catch (SocketException ex) {
1404 Assert.AreEqual (10042, ex.ErrorCode,
1405 "NoDelayChangeUdp #2");
1407 Assert.Fail ("NoDelayChangeUdp #3");
1414 [ExpectedException (typeof(ObjectDisposedException))]
1415 public void NoDelayClosed ()
1417 Socket sock = new Socket (AddressFamily.InterNetwork,
1423 bool val = sock.NoDelay;
1426 static bool BAAccepted = false;
1427 static Socket BASocket = null;
1428 static ManualResetEvent BACalledBack = new ManualResetEvent (false);
1430 private static void BACallback (IAsyncResult asyncResult)
1432 Socket sock = (Socket)asyncResult.AsyncState;
1434 BASocket = sock.EndAccept (asyncResult);
1437 BACalledBack.Set ();
1441 [ExpectedException (typeof(InvalidOperationException))]
1442 public void BeginAcceptNotBound ()
1444 Socket sock = new Socket (AddressFamily.InterNetwork,
1448 sock.BeginAccept (BACallback, sock);
1454 [ExpectedException (typeof(InvalidOperationException))]
1455 public void BeginAcceptNotListening ()
1457 Socket sock = new Socket (AddressFamily.InterNetwork,
1461 sock.Bind (new IPEndPoint (IPAddress.Any, 1236));
1463 sock.BeginAccept (BACallback, sock);
1469 public void BeginAccept ()
1471 Socket sock = new Socket (AddressFamily.InterNetwork,
1474 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
1480 BACalledBack.Reset ();
1482 sock.BeginAccept (BACallback, sock);
1484 Socket conn = new Socket (AddressFamily.InterNetwork,
1490 if (BACalledBack.WaitOne (2000, false) == false) {
1491 Assert.Fail ("BeginAccept wait timed out");
1494 Assertion.AssertEquals ("BeginAccept #1", true,
1496 Assertion.AssertEquals ("BeginAccept #2", true,
1497 BASocket.Connected);
1498 Assertion.AssertEquals ("BeginAccept #3", false,
1500 Assertion.AssertEquals ("BeginAccept #4", true,
1509 [ExpectedException (typeof(ObjectDisposedException))]
1510 public void BeginAcceptClosed ()
1512 Socket sock = new Socket (AddressFamily.InterNetwork,
1518 sock.BeginAccept (BACallback, sock);
1521 static bool BADAccepted = false;
1522 static Socket BADSocket = null;
1523 static byte[] BADBytes;
1524 static int BADByteCount;
1525 static ManualResetEvent BADCalledBack = new ManualResetEvent (false);
1527 private static void BADCallback (IAsyncResult asyncResult)
1529 Socket sock = (Socket)asyncResult.AsyncState;
1531 BADSocket = sock.EndAccept (out BADBytes,
1536 BADCalledBack.Set ();
1540 public void BeginAcceptData ()
1542 Socket sock = new Socket (AddressFamily.InterNetwork,
1545 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
1551 BADCalledBack.Reset ();
1553 sock.BeginAccept (256, BADCallback, sock);
1555 Socket conn = new Socket (AddressFamily.InterNetwork,
1558 byte[] send_bytes = new byte[] {10, 11, 12, 13};
1561 conn.Send (send_bytes);
1563 if (BADCalledBack.WaitOne (2000, false) == false) {
1564 Assert.Fail ("BeginAcceptData wait timed out");
1567 Assertion.AssertEquals ("BeginAcceptData #1", true,
1569 Assertion.AssertEquals ("BeginAcceptData #2", true,
1570 BADSocket.Connected);
1571 Assertion.AssertEquals ("BeginAcceptData #3", false,
1573 Assertion.AssertEquals ("BeginAcceptData #4", true,
1575 Assertion.AssertEquals ("BeginAcceptData #5",
1579 /* The MS runtime gives the returned data in a
1580 * much bigger array. TODO: investigate
1581 * whether it the size correlates to the first
1582 * parameter in BeginAccept()
1584 Assert.IsFalse (BADBytes.Length == send_bytes.Length,
1585 "BeginAcceptData #6");
1587 for(int i = 0; i < send_bytes.Length; i++) {
1588 Assertion.AssertEquals ("BeginAcceptData #" + (i+7).ToString (), send_bytes[i], BADBytes[i]);
1597 [ExpectedException (typeof(ObjectDisposedException))]
1598 public void BeginAcceptDataClosed ()
1600 Socket sock = new Socket (AddressFamily.InterNetwork,
1606 sock.BeginAccept (256, BADCallback, sock);
1610 public void BeginAcceptSocketUdp ()
1612 Socket sock = new Socket (AddressFamily.InterNetwork,
1615 Socket acc = new Socket (AddressFamily.InterNetwork,
1619 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
1626 sock.BeginAccept (acc, 256, BADCallback, sock);
1627 Assert.Fail ("BeginAcceptSocketUdp #1");
1628 } catch (SocketException ex) {
1629 Assertion.AssertEquals ("BeginAcceptSocketUdp #2", 10022, ex.ErrorCode);
1631 Assert.Fail ("BeginAcceptSocketUdp #3");
1639 public void BeginAcceptSocketBound ()
1641 Socket sock = new Socket (AddressFamily.InterNetwork,
1644 Socket acc = new Socket (AddressFamily.InterNetwork,
1648 IPEndPoint ep1 = new IPEndPoint (IPAddress.Loopback,
1651 IPEndPoint ep2 = new IPEndPoint (IPAddress.Loopback,
1660 sock.BeginAccept (acc, 256, BADCallback, sock);
1661 Assert.Fail ("BeginAcceptSocketBound #1");
1662 } catch (InvalidOperationException) {
1664 Assert.Fail ("BeginAcceptSocketBound #2");
1672 public void BeginAcceptSocket ()
1674 Socket sock = new Socket (AddressFamily.InterNetwork,
1677 Socket acc = new Socket (AddressFamily.InterNetwork,
1681 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
1687 BADCalledBack.Reset ();
1689 sock.BeginAccept (acc, 256, BADCallback, sock);
1691 Socket conn = new Socket (AddressFamily.InterNetwork,
1694 byte[] send_bytes = new byte[] {10, 11, 12, 13};
1697 conn.Send (send_bytes);
1699 if (BADCalledBack.WaitOne (2000, false) == false) {
1700 Assert.Fail ("BeginAcceptSocket wait timed out");
1703 Assertion.AssertEquals ("BeginAcceptSocket #1", true,
1705 Assertion.AssertEquals ("BeginAcceptSocket #2", true,
1706 BADSocket.Connected);
1707 Assertion.AssertEquals ("BeginAcceptSocket #3", false,
1709 Assertion.AssertEquals ("BeginAcceptSocket #4", true,
1711 Assertion.AssertEquals ("BeginAcceptSocket #5",
1714 Assertion.AssertEquals ("BeginAcceptSocket #6",
1715 AddressFamily.InterNetwork,
1717 Assertion.AssertEquals ("BeginAcceptSocket #7",
1720 Assertion.AssertEquals ("BeginAcceptSocket #8",
1723 Assertion.AssertEquals ("BeginAcceptSocket #9",
1725 acc.RemoteEndPoint);
1727 /* The MS runtime gives the returned data in a
1728 * much bigger array. TODO: investigate
1729 * whether it the size correlates to the first
1730 * parameter in BeginAccept()
1732 Assert.IsFalse (BADBytes.Length == send_bytes.Length,
1733 "BeginAcceptSocket #10");
1735 for(int i = 0; i < send_bytes.Length; i++) {
1736 Assertion.AssertEquals ("BeginAcceptSocket #" + (i+11).ToString (), send_bytes[i], BADBytes[i]);
1746 public void BeginAcceptSocketClosed ()
1748 Socket sock = new Socket (AddressFamily.InterNetwork,
1751 Socket acc = new Socket (AddressFamily.InterNetwork,
1758 sock.BeginAccept (acc, 256, BADCallback, null);
1759 Assert.Fail ("BeginAcceptSocketClosed #1");
1760 } catch (ObjectDisposedException) {
1762 Assert.Fail ("BeginAcceptSocketClosed #2");
1769 public void BeginAcceptSocketAccClosed ()
1771 Socket sock = new Socket (AddressFamily.InterNetwork,
1774 Socket acc = new Socket (AddressFamily.InterNetwork,
1777 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
1785 BADCalledBack.Reset ();
1788 sock.BeginAccept (acc, 256, BADCallback, null);
1789 Assert.Fail ("BeginAcceptSocketAccClosed #1");
1790 } catch (ObjectDisposedException) {
1792 Assert.Fail ("BeginAcceptSocketAccClosed #2");
1798 static bool BCConnected = false;
1799 static ManualResetEvent BCCalledBack = new ManualResetEvent (false);
1801 private static void BCCallback (IAsyncResult asyncResult)
1803 Socket sock = (Socket)asyncResult.AsyncState;
1805 sock.EndConnect (asyncResult);
1808 BCCalledBack.Set ();
1812 public void BeginConnectAddressPort ()
1814 Socket sock = new Socket (AddressFamily.InterNetwork,
1817 Socket listen = new Socket (AddressFamily.InterNetwork,
1820 IPAddress ip = IPAddress.Loopback;
1821 IPEndPoint ep = new IPEndPoint (ip, 1244);
1826 BCCalledBack.Reset ();
1828 BCConnected = false;
1830 sock.BeginConnect (ip, 1244, BCCallback, sock);
1832 if (BCCalledBack.WaitOne (2000, false) == false) {
1833 Assert.Fail ("BeginConnectAddressPort wait timed out");
1836 Assertion.AssertEquals ("BeginConnectAddressPort #1",
1844 public void BeginConnectAddressPortNull ()
1846 Socket sock = new Socket (AddressFamily.InterNetwork,
1849 IPAddress ip = null;
1852 sock.BeginConnect (ip, 1244, BCCallback,
1854 Assert.Fail ("BeginConnectAddressPortNull #1");
1855 } catch (ArgumentNullException) {
1857 Assert.Fail ("BeginConnectAddressPortNull #2");
1864 public void BeginConnectAddressPortListen ()
1866 Socket sock = new Socket (AddressFamily.InterNetwork,
1869 IPAddress ip = IPAddress.Loopback;
1870 IPEndPoint ep = new IPEndPoint (ip, 1245);
1876 sock.BeginConnect (ip, 1245, BCCallback, sock);
1877 Assert.Fail ("BeginConnectAddressPortListen #1");
1878 } catch (InvalidOperationException) {
1880 Assert.Fail ("BeginConnectAddressPortListen #2");
1887 [ExpectedException (typeof(ObjectDisposedException))]
1888 public void BeginConnectAddressPortClosed ()
1890 Socket sock = new Socket (AddressFamily.InterNetwork,
1893 IPAddress ip = IPAddress.Loopback;
1897 sock.BeginConnect (ip, 1244, BCCallback, sock);
1901 [Category ("NotOnMac")] // MacOSX will block attempting to connect to 127.0.0.4 causing the test to fail
1902 public void BeginConnectMultiple ()
1904 Socket sock = new Socket (AddressFamily.InterNetwork,
1907 Socket listen = new Socket (AddressFamily.InterNetwork,
1910 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
1912 IPAddress[] ips = new IPAddress[4];
1914 ips[0] = IPAddress.Parse ("127.0.0.4");
1915 ips[1] = IPAddress.Parse ("127.0.0.3");
1916 ips[2] = IPAddress.Parse ("127.0.0.2");
1917 ips[3] = IPAddress.Parse ("127.0.0.1");
1922 BCCalledBack.Reset ();
1924 BCConnected = false;
1926 sock.BeginConnect (ips, 1246, BCCallback, sock);
1928 /* Longer wait here, because the ms runtime
1929 * takes a lot longer to not connect
1931 if (BCCalledBack.WaitOne (10000, false) == false) {
1932 Assert.Fail ("BeginConnectMultiple wait failed");
1935 Assertion.AssertEquals ("BeginConnectMultiple #1",
1937 Assertion.AssertEquals ("BeginConnectMultiple #2",
1938 AddressFamily.InterNetwork,
1939 sock.RemoteEndPoint.AddressFamily);
1940 IPEndPoint remep = (IPEndPoint)sock.RemoteEndPoint;
1942 Assertion.AssertEquals ("BeginConnectMultiple #2",
1951 public void BeginConnectMultipleNull ()
1953 Socket sock = new Socket (AddressFamily.InterNetwork,
1956 IPAddress[] ips = null;
1959 sock.BeginConnect (ips, 1246, BCCallback,
1961 Assert.Fail ("BeginConnectMultipleNull #1");
1962 } catch (ArgumentNullException) {
1964 Assert.Fail ("BeginConnectMultipleNull #2");
1971 public void BeginConnectMultipleListen ()
1973 Socket sock = new Socket (AddressFamily.InterNetwork,
1976 IPAddress[] ips = new IPAddress[4];
1977 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
1980 ips[0] = IPAddress.Parse ("127.0.0.4");
1981 ips[1] = IPAddress.Parse ("127.0.0.3");
1982 ips[2] = IPAddress.Parse ("127.0.0.2");
1983 ips[3] = IPAddress.Parse ("127.0.0.1");
1989 sock.BeginConnect (ips, 1247, BCCallback,
1991 Assert.Fail ("BeginConnectMultipleListen #1");
1992 } catch (InvalidOperationException) {
1994 Assert.Fail ("BeginConnectMultipleListen #2");
2001 [ExpectedException (typeof(ObjectDisposedException))]
2002 public void BeginConnectMultipleClosed ()
2004 Socket sock = new Socket (AddressFamily.InterNetwork,
2007 IPAddress[] ips = new IPAddress[4];
2009 ips[0] = IPAddress.Parse ("127.0.0.4");
2010 ips[1] = IPAddress.Parse ("127.0.0.3");
2011 ips[2] = IPAddress.Parse ("127.0.0.2");
2012 ips[3] = IPAddress.Parse ("127.0.0.1");
2016 sock.BeginConnect (ips, 1247, BCCallback, sock);
2020 public void BeginConnectHostPortNull ()
2022 Socket sock = new Socket (AddressFamily.InterNetwork,
2027 sock.BeginConnect ((string)null, 0,
2029 Assert.Fail ("BeginConnectHostPort #1");
2030 } catch (ArgumentNullException) {
2032 Assert.Fail ("BeginConnectHostPort #2");
2039 public void BeginConnectHostPortListen ()
2041 Socket sock = new Socket (AddressFamily.InterNetwork,
2044 IPAddress ip = IPAddress.Loopback;
2045 IPEndPoint ep = new IPEndPoint (ip, 1248);
2051 sock.BeginConnect ("localhost", 1248,
2053 Assert.Fail ("BeginConnectHostPortListen #1");
2054 } catch (InvalidOperationException) {
2056 Assert.Fail ("BeginConnectHostPortListen #2");
2063 [Category ("NotWorking")] // Need to pick a non-IP AddressFamily that "works" on both mono and ms, this one only works on ms
2064 public void BeginConnectHostPortNotIP ()
2066 Socket sock = new Socket (AddressFamily.NetBios,
2067 SocketType.Seqpacket,
2068 ProtocolType.Unspecified);
2071 sock.BeginConnect ("localhost", 0, BCCallback,
2073 Assert.Fail ("BeginConnectHostPortNotIP #1");
2074 } catch (NotSupportedException) {
2076 Assert.Fail ("BeginConnectHostPortNotIP #2");
2083 [ExpectedException (typeof(ObjectDisposedException))]
2084 public void BeginConnectHostPortClosed ()
2086 Socket sock = new Socket (AddressFamily.InterNetwork,
2092 sock.BeginConnect ("localhost", 0, BCCallback, sock);
2095 static bool BDDisconnected = false;
2096 static ManualResetEvent BDCalledBack = new ManualResetEvent (false);
2098 private static void BDCallback (IAsyncResult asyncResult)
2100 Socket sock = (Socket)asyncResult.AsyncState;
2102 sock.EndDisconnect (asyncResult);
2103 BDDisconnected = true;
2105 BDCalledBack.Set ();
2109 [Category ("NotDotNet")] // "Needs XP or later"
2110 public void BeginDisconnect ()
2112 Socket sock = new Socket (AddressFamily.InterNetwork,
2115 Socket listen = new Socket (AddressFamily.InterNetwork,
2118 IPAddress ip = IPAddress.Loopback;
2119 IPEndPoint ep = new IPEndPoint (ip, 1254);
2124 sock.Connect (ip, 1254);
2126 Assertion.AssertEquals ("BeginDisconnect #1", true,
2129 sock.Shutdown (SocketShutdown.Both);
2131 BDCalledBack.Reset ();
2132 BDDisconnected = false;
2134 sock.BeginDisconnect (false, BDCallback, sock);
2136 if (BDCalledBack.WaitOne (2000, false) == false) {
2137 Assert.Fail ("BeginDisconnect wait timed out");
2140 Assertion.AssertEquals ("BeginDisconnect #2", true,
2142 Assertion.AssertEquals ("BeginDisconnect #3", false,
2150 public void BeginReceiveSocketError ()
2155 public void BeginReceiveGeneric ()
2160 public void BeginReceiveGenericSocketError ()
2164 private static void BSCallback (IAsyncResult asyncResult)
2166 Socket sock = (Socket)asyncResult.AsyncState;
2168 sock.EndSend (asyncResult);
2172 public void BeginSendNotConnected ()
2174 Socket sock = new Socket (AddressFamily.InterNetwork,
2178 byte[] send_bytes = new byte[] {10, 11, 12, 13};
2181 sock.BeginSend (send_bytes, 0,
2183 SocketFlags.None, BSCallback,
2185 Assert.Fail ("BeginSendNotConnected #1");
2186 } catch (SocketException ex) {
2187 Assertion.AssertEquals ("BeginSendNotConnected #2", 10057, ex.ErrorCode);
2189 Assert.Fail ("BeginSendNotConnected #3");
2196 public void BeginSendSocketError ()
2201 public void BeginSendGeneric ()
2206 public void BeginSendGenericSocketError ()
2211 public void BindTwice ()
2213 Socket sock = new Socket (AddressFamily.InterNetwork,
2216 IPEndPoint ep1 = new IPEndPoint (IPAddress.Loopback,
2218 IPEndPoint ep2 = new IPEndPoint (IPAddress.Loopback,
2225 Assert.Fail ("BindTwice #1");
2226 } catch (SocketException ex) {
2227 Assertion.AssertEquals ("BindTwice #2",
2228 10022, ex.ErrorCode);
2230 Assert.Fail ("BindTwice #3");
2237 public void Close ()
2239 Socket sock = new Socket (AddressFamily.InterNetwork,
2242 Socket listen = new Socket (AddressFamily.InterNetwork,
2245 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
2253 Assertion.AssertEquals ("Close #1", true,
2258 Thread.Sleep (3000);
2260 Assertion.AssertEquals ("Close #2", false,
2267 public void ConnectAddressPort ()
2269 Socket sock = new Socket (AddressFamily.InterNetwork,
2272 Socket listen = new Socket (AddressFamily.InterNetwork,
2275 IPAddress ip = IPAddress.Loopback;
2276 IPEndPoint ep = new IPEndPoint (ip, 1249);
2281 sock.Connect (ip, 1249);
2283 Assertion.AssertEquals ("ConnectAddressPort #1",
2284 true, sock.Connected);
2291 public void ConnectAddressPortNull ()
2293 Socket sock = new Socket (AddressFamily.InterNetwork,
2296 IPAddress ip = null;
2299 sock.Connect (ip, 1249);
2300 Assert.Fail ("ConnectAddressPortNull #1");
2301 } catch (ArgumentNullException) {
2303 Assert.Fail ("ConnectAddressPortNull #2");
2310 public void ConnectAddressPortListen ()
2312 Socket sock = new Socket (AddressFamily.InterNetwork,
2315 IPAddress ip = IPAddress.Loopback;
2316 IPEndPoint ep = new IPEndPoint (ip, 1250);
2322 sock.Connect (ip, 1250);
2323 Assert.Fail ("ConnectAddressPortListen #1");
2324 } catch (InvalidOperationException) {
2326 Assert.Fail ("ConnectAddressPortListen #2");
2333 [ExpectedException (typeof(ObjectDisposedException))]
2334 public void ConnectAddressPortClosed ()
2336 Socket sock = new Socket (AddressFamily.InterNetwork,
2339 IPAddress ip = IPAddress.Loopback;
2343 sock.Connect (ip, 1250);
2347 [Category ("NotOnMac")] // MacOSX trashes the fd after the failed connect attempt to 127.0.0.4
2348 public void ConnectMultiple ()
2350 Socket sock = new Socket (AddressFamily.InterNetwork,
2353 Socket listen = new Socket (AddressFamily.InterNetwork,
2356 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
2358 IPAddress[] ips = new IPAddress[4];
2360 ips[0] = IPAddress.Parse ("127.0.0.4");
2361 ips[1] = IPAddress.Parse ("127.0.0.3");
2362 ips[2] = IPAddress.Parse ("127.0.0.2");
2363 ips[3] = IPAddress.Parse ("127.0.0.1");
2368 sock.Connect (ips, 1251);
2370 Assertion.AssertEquals ("ConnectMultiple #1",
2371 true, sock.Connected);
2372 Assertion.AssertEquals ("ConnectMultiple #2",
2373 AddressFamily.InterNetwork,
2374 sock.RemoteEndPoint.AddressFamily);
2375 IPEndPoint remep = (IPEndPoint)sock.RemoteEndPoint;
2377 Assertion.AssertEquals ("ConnectMultiple #2",
2386 public void ConnectMultipleNull ()
2388 Socket sock = new Socket (AddressFamily.InterNetwork,
2391 IPAddress[] ips = null;
2394 sock.Connect (ips, 1251);
2395 Assert.Fail ("ConnectMultipleNull #1");
2396 } catch (ArgumentNullException) {
2398 Assert.Fail ("ConnectMultipleNull #2");
2405 public void ConnectMultipleListen ()
2407 Socket sock = new Socket (AddressFamily.InterNetwork,
2410 IPAddress[] ips = new IPAddress[4];
2411 IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
2414 ips[0] = IPAddress.Parse ("127.0.0.4");
2415 ips[1] = IPAddress.Parse ("127.0.0.3");
2416 ips[2] = IPAddress.Parse ("127.0.0.2");
2417 ips[3] = IPAddress.Parse ("127.0.0.1");
2423 sock.Connect (ips, 1252);
2424 Assert.Fail ("ConnectMultipleListen #1");
2425 } catch (InvalidOperationException) {
2427 Assert.Fail ("ConnectMultipleListen #2");
2434 [ExpectedException (typeof(ObjectDisposedException))]
2435 public void ConnectMultipleClosed ()
2437 Socket sock = new Socket (AddressFamily.InterNetwork,
2440 IPAddress[] ips = new IPAddress[4];
2442 ips[0] = IPAddress.Parse ("127.0.0.4");
2443 ips[1] = IPAddress.Parse ("127.0.0.3");
2444 ips[2] = IPAddress.Parse ("127.0.0.2");
2445 ips[3] = IPAddress.Parse ("127.0.0.1");
2449 sock.Connect (ips, 1252);
2453 public void ConnectHostPortNull ()
2455 Socket sock = new Socket (AddressFamily.InterNetwork,
2460 sock.Connect ((string)null, 0);
2461 Assert.Fail ("ConnectHostPort #1");
2462 } catch (ArgumentNullException) {
2464 Assert.Fail ("ConnectHostPort #2");
2471 public void ConnectHostPortListen ()
2473 Socket sock = new Socket (AddressFamily.InterNetwork,
2476 IPAddress ip = IPAddress.Loopback;
2477 IPEndPoint ep = new IPEndPoint (ip, 1253);
2483 sock.Connect ("localhost", 1253);
2484 Assert.Fail ("ConnectHostPortListen #1");
2485 } catch (InvalidOperationException) {
2487 Assert.Fail ("ConnectHostPortListen #2");
2494 [Category ("NotWorking")] // Need to pick a non-IP AddressFamily that "works" on both mono and ms, this one only works on ms
2495 public void ConnectHostPortNotIP ()
2497 Socket sock = new Socket (AddressFamily.NetBios,
2498 SocketType.Seqpacket,
2499 ProtocolType.Unspecified);
2502 sock.Connect ("localhost", 0);
2503 Assert.Fail ("ConnectHostPortNotIP #1");
2504 } catch (NotSupportedException) {
2506 Assert.Fail ("ConnectHostPortNotIP #2");
2513 [ExpectedException (typeof(ObjectDisposedException))]
2514 public void ConnectHostPortClosed ()
2516 Socket sock = new Socket (AddressFamily.InterNetwork,
2522 sock.Connect ("localhost", 0);
2526 [Category ("NotDotNet")] // "Needs XP or later"
2527 public void Disconnect ()
2529 Socket sock = new Socket (AddressFamily.InterNetwork,
2532 Socket listen = new Socket (AddressFamily.InterNetwork,
2535 IPAddress ip = IPAddress.Loopback;
2536 IPEndPoint ep = new IPEndPoint (ip, 1255);
2541 sock.Connect (ip, 1255);
2543 Assertion.AssertEquals ("Disconnect #1", true,
2546 sock.Shutdown (SocketShutdown.Both);
2548 sock.Disconnect (false);
2550 Assertion.AssertEquals ("BeginDisconnect #3", false,
2558 public void DuplicateAndClose ()
2563 public void IOControl ()
2568 public void ReceiveGeneric ()
2572 IPEndPoint endpoint = new IPEndPoint(IPAddress.Loopback, 1258);
2574 Socket listensock = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
2575 listensock.Bind (endpoint);
2576 listensock.Listen(1);
2578 Socket sendsock = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
2579 sendsock.Connect(endpoint);
2581 Socket clientsock = listensock.Accept();
2583 byte[] sendbuf = new byte[256];
2585 for(i = 0; i < 256; i++) {
2586 sendbuf[i] = (byte)i;
2588 for (i = 4; i < 6; i++) {
2589 Assert.AreEqual (sendbuf[i], (byte)i,
2590 "#1/" + i.ToString());
2594 sendsock.Send (sendbuf, 0, 256, SocketFlags.None,
2598 byte[] recvbuf = new byte[256];
2599 List<ArraySegment<byte>> recvbuflist = new List<ArraySegment<byte>>(2);
2600 recvbuflist.Add(new ArraySegment<byte>(recvbuf, 4, 2));
2601 recvbuflist.Add(new ArraySegment<byte>(recvbuf, 20, 230));
2603 clientsock.Receive (recvbuflist);
2605 /* recvbuf should now hold the first 2 bytes
2606 * of sendbuf from pos 4, and the next 230
2607 * bytes of sendbuf from pos 20
2610 for (i = 0; i < 2; i++) {
2611 Assert.AreEqual (sendbuf[i], recvbuf[i + 4],
2612 "#2/" + i.ToString());
2614 for (i = 2; i < 232; i++) {
2615 Assert.AreEqual (sendbuf[i], recvbuf[i + 18],
2616 "#2/" + i.ToString());
2620 clientsock.Close ();
2621 listensock.Close ();
2625 public void SendGeneric ()
2629 IPEndPoint endpoint = new IPEndPoint(IPAddress.Loopback, 1259);
2631 Socket listensock = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
2632 listensock.Bind (endpoint);
2633 listensock.Listen(1);
2635 Socket sendsock = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
2636 sendsock.Connect(endpoint);
2638 Socket clientsock = listensock.Accept();
2640 byte[] sendbuf = new byte[256];
2641 List<ArraySegment<byte>> sendbuflist = new List<ArraySegment<byte>>(2);
2643 sendbuflist.Add(new ArraySegment<byte>(sendbuf, 4, 2));
2644 sendbuflist.Add(new ArraySegment<byte>(sendbuf, 20, 230));
2646 for(i = 0; i < 256; i++) {
2647 sendbuf[i] = (byte)i;
2649 for (i = 4; i < 6; i++) {
2650 Assert.AreEqual (sendbuf[i], (byte)i,
2651 "#1/" + i.ToString());
2655 sendsock.Send (sendbuflist, SocketFlags.None, out err);
2658 byte[] recvbuf = new byte[256];
2660 clientsock.Receive (recvbuf);
2662 /* The first 2 bytes of recvbuf should now
2663 * hold 2 bytes of sendbuf from pos 4, and the
2664 * next 230 bytes of recvbuf should be sendbuf
2668 for (i = 0; i < 2; i++) {
2669 Assert.AreEqual (recvbuf[i], sendbuf[i + 4],
2670 "#2/" + i.ToString());
2672 for (i = 2; i < 232; i++) {
2673 Assert.AreEqual (recvbuf[i], sendbuf[i + 18],
2674 "#2/" + i.ToString());
2678 clientsock.Close ();
2679 listensock.Close ();
2683 public void ListenNotBound ()
2685 Socket sock = new Socket (AddressFamily.InterNetwork,
2691 Assert.Fail ("ListenNotBound #1");
2692 } catch (SocketException ex) {
2693 Assertion.AssertEquals ("ListenNotBound #2",
2694 10022, ex.ErrorCode);
2696 Assert.Fail ("ListenNotBound #3");
2703 static Socket CWRSocket;
2704 static bool CWRReceiving = true;
2705 static ManualResetEvent CWRReady = new ManualResetEvent (false);
2707 private static void CWRReceiveThread ()
2709 byte[] buf = new byte[256];
2712 CWRSocket.Receive (buf);
2713 } catch (SocketException) {
2714 CWRReceiving = false;
2721 public void CloseWhileReceiving ()
2723 CWRSocket = new Socket (AddressFamily.InterNetwork,
2726 CWRSocket.Bind (new IPEndPoint (IPAddress.Loopback,
2729 Thread recv_thread = new Thread (new ThreadStart (CWRReceiveThread));
2731 recv_thread.Start ();
2732 Thread.Sleep (250); /* Wait for the thread to be already receiving */
2735 if (CWRReady.WaitOne (1000, false) == false) {
2736 Assert.Fail ("CloseWhileReceiving wait timed out");
2739 Assert.IsFalse (CWRReceiving);
2742 static bool RRCLastRead = false;
2743 static ManualResetEvent RRCReady = new ManualResetEvent (false);
2745 private static void RRCClientThread ()
2747 byte[] bytes = new byte[8];
2750 Socket sock = new Socket (AddressFamily.InterNetwork,
2753 sock.Connect (new IPEndPoint (IPAddress.Loopback,
2756 NetworkStream stream = new NetworkStream (sock);
2758 readbyte = stream.ReadByte ();
2759 Assertion.AssertEquals ("ReceiveRemoteClosed #1",
2762 stream.Read (bytes, 0, 0);
2764 readbyte = stream.ReadByte ();
2765 Assertion.AssertEquals ("ReceiveRemoteClosed #2",
2768 stream.Read (bytes, 0, 0);
2770 readbyte = stream.ReadByte ();
2771 Assertion.AssertEquals ("ReceiveRemoteClosed #3",
2781 public void ReceiveRemoteClosed ()
2783 Socket sock = new Socket (AddressFamily.InterNetwork,
2786 sock.Bind (new IPEndPoint (IPAddress.Loopback, 1257));
2790 Thread client_thread = new Thread (new ThreadStart (RRCClientThread));
2791 client_thread.Start ();
2793 Socket client = sock.Accept ();
2794 NetworkStream stream = new NetworkStream (client);
2795 stream.WriteByte (0x00);
2796 stream.WriteByte (0x00);
2800 RRCReady.WaitOne (1000, false);
2801 Assert.IsTrue (RRCLastRead);
2805 // Test case for bug #471580
2807 public void UdpDoubleBind ()
2809 Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
2810 s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, 1);
2812 s.Bind (new IPEndPoint (IPAddress.Any, 12345));
2814 Socket ss = new Socket (AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
2815 ss.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, 1);
2817 ss.Bind (new IPEndPoint (IPAddress.Any, 12345));
2819 // If we make it this far, we succeeded.
2827 public void ConnectedProperty ()
2829 TcpListener listener = new TcpListener (IPAddress.Loopback, 23456);
2832 Socket client = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
2833 client.Connect (IPAddress.Loopback, 23456);
2834 Socket server = listener.AcceptSocket ();
2837 server.EndSend(server.BeginSend (new byte[10], 0, 10, SocketFlags.None, null, null));
2840 server.EndReceive (server.BeginReceive (new byte[10], 0, 10, SocketFlags.None, null, null));
2843 Assert.IsTrue (!client.Connected);
2844 Assert.IsTrue (!server.Connected);