// System.Net.Sockets.SocketTest.cs // // Authors: // Brad Fitzpatrick (brad@danga.com) // Gonzalo Paniagua Javier (gonzalo@novell.com) // // (C) Copyright 2003 Brad Fitzpatrick // Copyright (c) 2005 Novell, Inc. (http://www.novell.com) // using System; using System.Collections; using System.Threading; using System.Net; using System.Net.Sockets; using NUnit.Framework; namespace MonoTests.System.Net.Sockets { [TestFixture] public class SocketTest { // note: also used in SocketCas tests public const string BogusAddress = "192.168.244.244"; public const int BogusPort = 23483; [Test] public void ConnectIPAddressAny () { IPEndPoint ep = new IPEndPoint (IPAddress.Any, 0); try { using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp)) { s.Connect (ep); s.Close (); } Assert.Fail ("#1"); } catch (SocketException ex) { Assert.AreEqual (10049, ex.ErrorCode, "#2"); } try { using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) { s.Connect (ep); s.Close (); } Assert.Fail ("#3"); } catch (SocketException ex) { Assert.AreEqual (10049, ex.ErrorCode, "#4"); } } [Test] [Ignore ("Bug #75158")] public void IncompatibleAddress () { IPEndPoint epIPv6 = new IPEndPoint (IPAddress.IPv6Any, 0); try { using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP)) { s.Connect (epIPv6); s.Close (); } Assert.Fail ("#1"); } catch (SocketException ex) { #if !NET_2_0 // invalid argument int expectedError = 10022; #else // address incompatible with protocol int expectedError = 10047; #endif Assert.AreEqual (expectedError, ex.ErrorCode, "#2"); } } [Test] [Category ("InetAccess")] public void EndConnect () { IPAddress ipOne = IPAddress.Parse (BogusAddress); IPEndPoint ipEP = new IPEndPoint (ipOne, BogusPort); Socket sock = new Socket (ipEP.AddressFamily, SocketType.Stream, ProtocolType.Tcp); IAsyncResult ar = sock.BeginConnect (ipEP, null, null); bool gotException = false; try { sock.EndConnect (ar); // should raise an exception because connect was bogus } catch { gotException = true; } Assertion.AssertEquals ("A01", gotException, true); } [Test] [ExpectedException (typeof (ArgumentNullException))] public void SelectEmpty () { ArrayList list = new ArrayList (); Socket.Select (list, list, list, 1000); } private bool BlockingConnect (bool block) { IPEndPoint ep = new IPEndPoint(IPAddress.Loopback, 1234); Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); server.Bind(ep); server.Blocking=block; server.Listen(0); Socket conn = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); conn.Connect (ep); Socket client = server.Accept(); bool client_block = client.Blocking; client.Close(); conn.Close(); server.Close(); return(client_block); } [Test] public void AcceptBlockingStatus() { bool block; block = BlockingConnect(true); Assertion.AssertEquals ("BlockingStatus01", block, true); block = BlockingConnect(false); Assertion.AssertEquals ("BlockingStatus02", block, false); } [Test] #if !NET_2_0 [ExpectedException (typeof (ArgumentException))] #endif public void SetSocketOptionBoolean () { IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 1); Socket sock = new Socket (ep.Address.AddressFamily, SocketType.Stream, ProtocolType.Tcp); try { sock.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.KeepAlive, true); } finally { sock.Close (); } } [Test] public void TestSelect1 () { Socket srv = CreateServer (); ClientSocket clnt = new ClientSocket (srv.LocalEndPoint); Thread th = new Thread (new ThreadStart (clnt.ConnectSleepClose)); Socket acc = null; try { th.Start (); acc = srv.Accept (); clnt.Write (); ArrayList list = new ArrayList (); ArrayList empty = new ArrayList (); list.Add (acc); Socket.Select (list, empty, empty, 100); Assertion.AssertEquals ("#01", 0, empty.Count); Assertion.AssertEquals ("#02", 1, list.Count); Socket.Select (empty, list, empty, 100); Assertion.AssertEquals ("#03", 0, empty.Count); Assertion.AssertEquals ("#04", 1, list.Count); Socket.Select (list, empty, empty, -1); Assertion.AssertEquals ("#05", 0, empty.Count); Assertion.AssertEquals ("#06", 1, list.Count); } finally { if (acc != null) acc.Close (); srv.Close (); } } static Socket CreateServer () { Socket sock = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); sock.Bind (new IPEndPoint (IPAddress.Loopback, 0)); sock.Listen (1); return sock; } class ClientSocket { Socket sock; EndPoint ep; public ClientSocket (EndPoint ep) { this.ep = ep; sock = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); } public void ConnectSleepClose () { sock.Connect (ep); Thread.Sleep (2000); sock.Close (); } public void Write () { byte [] b = new byte [10]; sock.Send (b); } } byte[] buf = new byte[100]; [Test] [ExpectedException (typeof (ObjectDisposedException))] public void Disposed1 () { Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); EndPoint ep = new IPEndPoint (IPAddress.Any, 31337); s.Close(); s.ReceiveFrom (buf, ref ep); } [Test] [ExpectedException (typeof (ObjectDisposedException))] public void Disposed2 () { Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); s.Close(); s.Blocking = true; } [Test] [ExpectedException (typeof (ObjectDisposedException))] public void Disposed3 () { Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); s.Close(); s.GetSocketOption (0, 0); } [Test] [ExpectedException (typeof (ObjectDisposedException))] public void Disposed4 () { Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); s.Close(); s.GetSocketOption (0, 0, null); } [Test] [ExpectedException (typeof (ObjectDisposedException))] public void Disposed5 () { Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); s.Close(); s.GetSocketOption (0, 0, 0); } [Test] [ExpectedException (typeof (ObjectDisposedException))] public void Disposed6 () { Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); s.Close(); s.Listen (5); } [Test] [ExpectedException (typeof (ObjectDisposedException))] public void Disposed7 () { Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); s.Close(); s.Poll (100, 0); } [Test] [ExpectedException (typeof (ObjectDisposedException))] public void Disposed8 () { Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); s.Close(); s.Receive (buf); } [Test] [ExpectedException (typeof (ObjectDisposedException))] public void Disposed9 () { Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); s.Close(); s.Receive (buf, 0); } [Test] [ExpectedException (typeof (ObjectDisposedException))] public void Disposed10 () { Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); s.Close(); s.Receive (buf, 10, 0); } [Test] [ExpectedException (typeof (ObjectDisposedException))] public void Disposed11 () { Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); EndPoint ep = new IPEndPoint (IPAddress.Any, 31337); s.Close(); s.Receive (buf, 0, 10, 0); } [Test] [ExpectedException (typeof (ObjectDisposedException))] public void Disposed12 () { Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); EndPoint ep = new IPEndPoint (IPAddress.Any, 31337); s.Close(); s.ReceiveFrom (buf, 0, ref ep); } [Test] [ExpectedException (typeof (ObjectDisposedException))] public void Disposed13 () { Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); EndPoint ep = new IPEndPoint (IPAddress.Any, 31337); s.Close(); s.ReceiveFrom (buf, 10, 0, ref ep); } [Test] [ExpectedException (typeof (ObjectDisposedException))] public void Disposed14 () { Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); EndPoint ep = new IPEndPoint (IPAddress.Any, 31337); s.Close(); s.ReceiveFrom (buf, 0, 10, 0, ref ep); } [Test] [ExpectedException (typeof (ObjectDisposedException))] public void Disposed15 () { Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); s.Close(); s.Send (buf); } [Test] [ExpectedException (typeof (ObjectDisposedException))] public void Disposed16 () { Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); s.Close(); s.Send (buf, 0); } [Test] [ExpectedException (typeof (ObjectDisposedException))] public void Disposed17 () { Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); s.Close(); s.Send (buf, 10, 0); } [Test] [ExpectedException (typeof (ObjectDisposedException))] public void Disposed18 () { Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); EndPoint ep = new IPEndPoint (IPAddress.Any, 31337); s.Close(); s.Send (buf, 0, 10, 0); } [Test] [ExpectedException (typeof (ObjectDisposedException))] public void Disposed19 () { Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); EndPoint ep = new IPEndPoint (IPAddress.Any, 31337); s.Close(); s.SendTo (buf, 0, ep); } [Test] [ExpectedException (typeof (ObjectDisposedException))] public void Disposed20 () { Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); EndPoint ep = new IPEndPoint (IPAddress.Any, 31337); s.Close(); s.SendTo (buf, 10, 0, ep); } [Test] [ExpectedException (typeof (ObjectDisposedException))] public void Disposed21 () { Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); EndPoint ep = new IPEndPoint (IPAddress.Any, 31337); s.Close(); s.SendTo (buf, 0, 10, 0, ep); } [Test] [ExpectedException (typeof (ObjectDisposedException))] public void Disposed22 () { Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); EndPoint ep = new IPEndPoint (IPAddress.Any, 31337); s.Close(); s.SendTo (buf, ep); } [Test] [ExpectedException (typeof (ObjectDisposedException))] public void Disposed23 () { Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); EndPoint ep = new IPEndPoint (IPAddress.Any, 31337); s.Close(); s.Shutdown (0); } } }