[Mono-dev] HttpListener hangs with r106513

Gert Driesen gert.driesen at telenet.be
Thu Jul 3 04:44:36 EDT 2008


Hey Casey,

Miguel prepared a fix for this issue (committed by Martin in r107127), and
I've added a unit test based on your repro.

Gert

-----Original Message-----
From: mono-devel-list-bounces at lists.ximian.com
[mailto:mono-devel-list-bounces at lists.ximian.com] On Behalf Of Casey
Marshall
Sent: woensdag 25 juni 2008 1:05
To: mono-devel
Subject: [Mono-dev] HttpListener hangs with r106513

I've noticed that it recent SVN mono snapshots (r106513) using
HttpListener and WebRequest in the same process hangs. This doesn't hang
with 1.9.1, and didn't with less recent snapshots.

I haven't tried having the client and server in different processes, and
don't know if it reproduces there.

Test case:


using System;
using System.IO;
using System.Net;
using System.Threading;

class simplehttp
{
        public static void Main(string[] argv)
        {
                simplehttp sh = new simplehttp();
                Thread srv = new Thread(new ThreadStart(sh.ServerMain));
                srv.Name = "HttpServer";
                srv.Start();

                for (;;)
                {
                        HttpWebRequest req = (HttpWebRequest)
WebRequest.Create ("http://localhost:8888/foobar/");
                        req.ServicePoint.Expect100Continue = false;
                        req.ServicePoint.UseNagleAlgorithm = false;
                        req.Method = "POST";
                        StreamWriter w = new
StreamWriter(req.GetRequestStream());
                        w.WriteLine("Hello, server!");
                        w.Close();

                        HttpWebResponse resp = (HttpWebResponse)
req.GetResponse();
                        StreamReader r = new
StreamReader(resp.GetResponseStream());
                        System.Console.WriteLine("client reads: {0}",
r.ReadToEnd());
                        r.Close();
                }
        }

        private void ServerMain()
        {
                HttpListener listener = new HttpListener();
                listener.Prefixes.Add("http://*:8888/foobar/");
                listener.Start();
                while (true)
                {
                        HttpListenerContext ctx = listener.GetContext();
                        ThreadPool.QueueUserWorkItem(new
WaitCallback(HandleConnection), ctx);
                }
        }

        private void HandleConnection(object state)
        {
                HttpListenerContext ctx = (HttpListenerContext) state;
                HttpListenerRequest req = ctx.Request;
                StreamReader r = new StreamReader(req.InputStream);
                System.Console.WriteLine ("server reads {0}",
r.ReadToEnd());

                HttpListenerResponse resp = ctx.Response;
                StreamWriter o = new StreamWriter(resp.OutputStream);
                o.WriteLine("Hello, world!");
                o.Close();
        }
}

Thanks.
_______________________________________________
Mono-devel-list mailing list
Mono-devel-list at lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-devel-list



More information about the Mono-devel-list mailing list