1 // System.Net.Sockets.TcpListenerTest.cs
4 // Phillip Pearson (pp@myelin.co.nz)
5 // Martin Willemoes Hansen (mwh@sysrq.dk)
6 // Gonzalo Paniagua Javier (gonzalo@ximian.com)
8 // (C) Copyright 2001 Phillip Pearson (http://www.myelin.co.nz)
9 // (C) Copyright 2003 Martin Willemoes Hansen (mwh@sysrq.dk)
10 // (c) 2003 Ximian, Inc. (http://www.ximian.com)
15 using System.Net.Sockets;
16 using NUnit.Framework;
18 using MonoTests.Helpers;
20 namespace MonoTests.System.Net.Sockets
23 [Category ("RequiresBSDSockets")]
24 public class TcpListenerTest
27 public void TcpListener ()
29 var port = NetworkHelpers.FindFreePort ();
30 // listen with a new listener (IPv4 is the default)
31 TcpListener inListener = new TcpListener (port);
35 // connect to it from a new socket
36 IPHostEntry hostent = Dns.GetHostByAddress (IPAddress.Loopback);
37 Socket outSock = null;
39 foreach (IPAddress address in hostent.AddressList) {
40 if (address.AddressFamily == AddressFamily.InterNetwork) {
41 /// Only keep IPv4 addresses, our Server is in IPv4 only mode.
42 outSock = new Socket (address.AddressFamily, SocketType.Stream,
44 IPEndPoint remote = new IPEndPoint (address, port);
45 outSock.Connect (remote);
50 // make sure the connection arrives
51 Assert.IsTrue (inListener.Pending ());
52 Socket inSock = inListener.AcceptSocket ();
54 // now send some data and see if it comes out the other end
56 byte[] outBuf = new Byte [len];
57 for (int i=0; i<len; i++)
58 outBuf [i] = (byte) (i % 256);
60 outSock.Send (outBuf, 0, len, 0);
62 byte[] inBuf = new Byte[len];
63 int ret = inSock.Receive (inBuf, 0, len, 0);
66 // let's see if it arrived OK
67 Assert.IsTrue (ret != 0);
68 for (int i=0; i<len; i++)
69 Assert.IsTrue (inBuf[i] == outBuf [i]);
71 // tidy up after ourselves
78 public void CtorInt1 ()
81 try { new TcpListener (-1); } catch { nex++; }
83 new TcpListener (65535);
84 try { new TcpListener (65536); } catch { nex++; }
85 try { new TcpListener (100000); } catch { nex++; }
86 Assert.IsTrue (nex == 3);
90 [ExpectedException (typeof (ArgumentNullException))]
91 public void CtorIPEndPoint ()
93 new TcpListener (null);
97 [ExpectedException (typeof (ArgumentNullException))]
98 public void CtorIPAddressInt1 ()
100 new TcpListener (null, 100000);
104 [ExpectedException (typeof (ArgumentOutOfRangeException))]
105 public void CtorIPAddressInt2 ()
107 new TcpListener (IPAddress.Any, 100000);
110 class MyListener : TcpListener
113 : base (IPAddress.Loopback, NetworkHelpers.FindFreePort ())
117 public Socket GetSocket ()
122 public bool IsActive {
123 get { return Active; }
128 public void PreStartStatus ()
130 MyListener listener = new MyListener ();
131 Assert.AreEqual (false, listener.IsActive, "#01");
132 Assert.IsTrue (null != listener.GetSocket (), "#02");
134 listener.AcceptSocket ();
135 Assert.Fail ("Exception not thrown");
136 } catch (InvalidOperationException) {
140 listener.AcceptTcpClient ();
141 Assert.Fail ("Exception not thrown");
142 } catch (InvalidOperationException) {
147 Assert.Fail ("Exception not thrown");
148 } catch (InvalidOperationException) {
155 public void PostStartStatus ()
157 MyListener listener = new MyListener ();
159 Assert.AreEqual (true, listener.IsActive, "#01");
160 Assert.IsTrue (null != listener.GetSocket (), "#02");
162 Socket sock = listener.GetSocket ();
163 listener.Start (); // Start called twice
164 Assert.AreEqual (true, listener.IsActive, "#03");
165 Assert.IsTrue (null != listener.GetSocket (), "#04");
167 Assert.AreEqual (false, listener.Pending (), "#05");
170 Assert.AreEqual (false, listener.IsActive, "#06");
171 Assert.IsTrue (null != listener.GetSocket (), "#07");
172 Assert.IsTrue (sock != listener.GetSocket (), "#08");
176 public void StartListenMoreThan5 ()
178 var port = NetworkHelpers.FindFreePort ();
179 TcpListener listen = new TcpListener (IPAddress.Loopback, port);
190 listen.Start (32768);
193 listen.Start (65536);