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 public class TcpListenerTest
26 public void TcpListener ()
28 var port = NetworkHelpers.FindFreePort ();
29 // listen with a new listener (IPv4 is the default)
30 TcpListener inListener = new TcpListener (port);
34 // connect to it from a new socket
35 IPHostEntry hostent = Dns.GetHostByAddress (IPAddress.Loopback);
36 Socket outSock = null;
38 foreach (IPAddress address in hostent.AddressList) {
39 if (address.AddressFamily == AddressFamily.InterNetwork) {
40 /// Only keep IPv4 addresses, our Server is in IPv4 only mode.
41 outSock = new Socket (address.AddressFamily, SocketType.Stream,
43 IPEndPoint remote = new IPEndPoint (address, port);
44 outSock.Connect (remote);
49 // make sure the connection arrives
50 Assert.IsTrue (inListener.Pending ());
51 Socket inSock = inListener.AcceptSocket ();
53 // now send some data and see if it comes out the other end
55 byte[] outBuf = new Byte [len];
56 for (int i=0; i<len; i++)
57 outBuf [i] = (byte) (i % 256);
59 outSock.Send (outBuf, 0, len, 0);
61 byte[] inBuf = new Byte[len];
62 int ret = inSock.Receive (inBuf, 0, len, 0);
65 // let's see if it arrived OK
66 Assert.IsTrue (ret != 0);
67 for (int i=0; i<len; i++)
68 Assert.IsTrue (inBuf[i] == outBuf [i]);
70 // tidy up after ourselves
77 public void CtorInt1 ()
80 try { new TcpListener (-1); } catch { nex++; }
82 new TcpListener (65535);
83 try { new TcpListener (65536); } catch { nex++; }
84 try { new TcpListener (100000); } catch { nex++; }
85 Assert.IsTrue (nex == 3);
89 [ExpectedException (typeof (ArgumentNullException))]
90 public void CtorIPEndPoint ()
92 new TcpListener (null);
96 [ExpectedException (typeof (ArgumentNullException))]
97 public void CtorIPAddressInt1 ()
99 new TcpListener (null, 100000);
103 [ExpectedException (typeof (ArgumentOutOfRangeException))]
104 public void CtorIPAddressInt2 ()
106 new TcpListener (IPAddress.Any, 100000);
109 class MyListener : TcpListener
112 : base (IPAddress.Loopback, NetworkHelpers.FindFreePort ())
116 public Socket GetSocket ()
121 public bool IsActive {
122 get { return Active; }
127 public void PreStartStatus ()
129 MyListener listener = new MyListener ();
130 Assert.AreEqual (false, listener.IsActive, "#01");
131 Assert.IsTrue (null != listener.GetSocket (), "#02");
133 listener.AcceptSocket ();
134 Assert.Fail ("Exception not thrown");
135 } catch (InvalidOperationException) {
139 listener.AcceptTcpClient ();
140 Assert.Fail ("Exception not thrown");
141 } catch (InvalidOperationException) {
146 Assert.Fail ("Exception not thrown");
147 } catch (InvalidOperationException) {
154 public void PostStartStatus ()
156 MyListener listener = new MyListener ();
158 Assert.AreEqual (true, listener.IsActive, "#01");
159 Assert.IsTrue (null != listener.GetSocket (), "#02");
161 Socket sock = listener.GetSocket ();
162 listener.Start (); // Start called twice
163 Assert.AreEqual (true, listener.IsActive, "#03");
164 Assert.IsTrue (null != listener.GetSocket (), "#04");
166 Assert.AreEqual (false, listener.Pending (), "#05");
169 Assert.AreEqual (false, listener.IsActive, "#06");
170 Assert.IsTrue (null != listener.GetSocket (), "#07");
171 Assert.IsTrue (sock != listener.GetSocket (), "#08");
175 public void StartListenMoreThan5 ()
177 var port = NetworkHelpers.FindFreePort ();
178 TcpListener listen = new TcpListener (IPAddress.Loopback, port);
189 listen.Start (32768);
192 listen.Start (65536);