2007-01-23 Dick Porter <dick@ximian.com>
authorDick Porter <dick@acm.org>
Tue, 23 Jan 2007 21:40:58 +0000 (21:40 -0000)
committerDick Porter <dick@acm.org>
Tue, 23 Jan 2007 21:40:58 +0000 (21:40 -0000)
* TcpListener.cs: 2.0 profile updates, based on a patch by Sridhar
Kulkarni (sridharkulkarni@gmail.com)

2007-01-23  Dick Porter  <dick@ximian.com>

* TcpListenerTest.cs: Test 2.0 Start(int) overload

svn path=/trunk/mcs/; revision=71565

mcs/class/System/System.Net.Sockets/ChangeLog
mcs/class/System/System.Net.Sockets/TcpListener.cs
mcs/class/System/Test/System.Net.Sockets/ChangeLog
mcs/class/System/Test/System.Net.Sockets/TcpListenerTest.cs

index 128f68c15a04868a4472e0963e2928664138b970..ad1e59c3ce733c57c3da2f7e17cb9f21d211a078 100644 (file)
@@ -1,5 +1,6 @@
 2007-01-23  Dick Porter  <dick@ximian.com>
 
+       * TcpListener.cs: 
        * TcpClient.cs: 2.0 profile updates, based on a patch by Sridhar
        Kulkarni (sridharkulkarni@gmail.com)
 
index 599e203d6b08f53ed7c905ddae613f30b88ea9ed..954419f1c180322d6f74442ff3310c630bdd6461 100644 (file)
@@ -4,12 +4,13 @@
 //    Phillip Pearson (pp@myelin.co.nz)
 //    Gonzalo Paniagua Javier (gonzalo@ximian.com)
 //       Patrik Torstensson
+//    Sridhar Kulkarni (sridharkulkarni@gmail.com)
 //
 // Copyright (C) 2001, Phillip Pearson
 //    http://www.myelin.co.nz
 //
 // (c) 2003 Ximian, Inc. (http://www.ximian.com)
-// (c) 2004 Novell, Inc.
+// (c) 2004-2006 Novell, Inc.
 //
 
 //
@@ -139,7 +140,36 @@ namespace System.Net.Sockets
                {
                        get { return server; }
                }
-               
+
+#if NET_2_0
+               /// <summary>
+               /// Specifies whether the TcpListener allows only one
+               /// underlying socket to listen to a specific port
+               /// </summary>
+               public bool ExclusiveAddressUse
+               {
+                       get {
+                               if (server == null) {
+                                       throw new ObjectDisposedException (GetType ().ToString ());
+                               }
+                               if (active) {
+                                       throw new InvalidOperationException ("The TcpListener has been started");
+                               }
+
+                               return(server.ExclusiveAddressUse);
+                       }
+                       set {
+                               if (server == null) {
+                                       throw new ObjectDisposedException (GetType ().ToString ());
+                               }
+                               if (active) {
+                                       throw new InvalidOperationException ("The TcpListener has been started");
+                               }
+
+                               server.ExclusiveAddressUse = value;
+                       }
+               }
+#endif
                
                // methods
 
@@ -201,22 +231,72 @@ namespace System.Net.Sockets
                /// </summary>
                public void Start ()
                {
-                       if (active)
-                               return;
-
-                       if (server == null)
-                               throw new InvalidOperationException("Invalid server socket");
-
-                       server.Bind (savedEP);
-                       
                        // MS: sets Listen to Int32.MaxValue
-                       server.Listen(5);       
+                       this.Start (5);
                        // According to the man page some BSD and BSD-derived
                        // systems limit the backlog to 5.  This should really be
                        // configurable though
+               }
 
+               /// <summary>
+               /// Tells the TcpListener to start listening for max number
+               /// of pending connections.
+               /// </summary>
+
+#if NET_2_0
+               public
+#else
+               private
+#endif
+               void Start (int backlog)
+               {
+                       if (active) {
+                               return;
+                       }
+                       if (server == null) {
+                               throw new InvalidOperationException ("Invalid server socket");
+                       }
+                       
+                       server.Bind (savedEP);
+                       server.Listen (backlog);
                        active = true;
                }
+
+#if NET_2_0            
+               public IAsyncResult BeginAcceptSocket (AsyncCallback callback,
+                                                      object state)
+               {
+                       if (server == null) {
+                               throw new ObjectDisposedException (GetType ().ToString ());
+                       }
+                       
+                       return(server.BeginAccept (callback, state));
+               }
+               
+               public IAsyncResult BeginAcceptTcpClient (AsyncCallback callback, object state)
+               {
+                       if (server == null) {
+                               throw new ObjectDisposedException (GetType ().ToString ());
+                       }
+                       
+                       return(server.BeginAccept (callback, state));
+               }
+               
+               public Socket EndAcceptSocket (IAsyncResult asyncResult) 
+               {
+                       return(server.EndAccept (asyncResult));
+               }
+               
+               public TcpClient EndAcceptTcpClient (IAsyncResult asyncResult)
+               {
+                       Socket clientSocket = server.EndAccept (asyncResult);
+                       TcpClient client = new TcpClient ();
+                       
+                       client.SetTcpClient (clientSocket);
+                       
+                       return(client);
+               }
+#endif
                
                /// <summary>
                /// Tells the TcpListener to stop listening and dispose
index 41844b1427173823cb308cc9e95dcc01bf3592e3..aa34326e942103aa55a3f34d6ee75e44353a7be8 100644 (file)
@@ -1,5 +1,7 @@
 2007-01-23  Dick Porter  <dick@ximian.com>
 
+       * TcpListenerTest.cs: Test 2.0 Start(int) overload
+
        * TcpClientTest.cs: Test 2.0 Connect(IPAddress[], port) overload
 
 2007-01-11  Dick Porter  <dick@ximian.com>
index 92d505b99a62885c410f20861ee75f4b3be7e803..1add61ab8325b4679f67b5c3b5528c9e85b310a2 100644 (file)
@@ -167,5 +167,28 @@ namespace MonoTests.System.Net.Sockets
                        Assert ("#07", null != listener.GetSocket ());
                        Assert ("#08", sock != listener.GetSocket ());
                }
+
+#if NET_2_0
+               [Test]
+               public void StartListenMoreThan5 ()
+               {
+                       TcpListener listen = new TcpListener (IPAddress.Loopback, 1234);
+
+                       listen.Start (6);
+                       listen.Stop ();
+                       
+                       listen.Start (256);
+                       listen.Stop ();
+                       
+                       listen.Start (1024);
+                       listen.Stop ();
+
+                       listen.Start (32768);
+                       listen.Stop ();
+                       
+                       listen.Start (65536);
+                       listen.Stop ();
+               }
+#endif
        }
 }