Client keeps waiting until the socket is closed

Topics: blog
Mar 3, 2011 at 2:10 AM

Hi,

I'm using the C# web server for listening to http equests on my server. Here is the problem:

Client sends a GET request or a POST request

Server sends the response back

Client keeps waiting for the response and doesn't receive unless the server socket is closed.

Here is a sample request/response:

 

Host: 172.17.1.124
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.14) Gecko/20110218 Firefox/3.6.14 (.NET CLR 3.5.30729)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive


Connection: Keep-Alive
Keep-Alive: timeout=5, max=100
Date: Thu, 03 Mar 2011 03:00:53 GMT
Server: C# Webserver
Content-Type: text/html

The timeout is defined by:

 

private int _keepAliveTimeout

in HttpContext class.

The client waits for exactly the time defined in keepAliveTimeout. Any clues on why would that happen? I've tried with GET/POST with my client as well as with standard Firefox browser as client as well.

Here's how I send the response:

 

        protected void SendResponse(RequestContext context, HttpStatusCode status)
        {
            context.Response.Status = status;
            var generator = new ResponseWriter();
            generator.Send(context.HttpContext, context.Response);
            if (context.Request.Connection != null &&
                context.Request.Connection.Type == ConnectionType.Close)
            {
                context.HttpContext.Stream.Close();
            }
            Console.WriteLine("Sending Response:" + context.Response.Status);
            generator = null;
        }

from a custom module which returns ProcessingResult.Abort; from "Process" method after the response is sent.

Is there anything I'm missing?

 

Thanks

Coordinator
Mar 3, 2011 at 6:16 AM

I don't see a body or a content-length header. If you got no body, set content-length to zero (it's a bug if it's not being sent automatically, but you can try to add it t see if that's the case).

Mar 4, 2011 at 2:40 AM
Edited Mar 4, 2011 at 2:47 AM

Hi,

 

That did the trick for sure (client received immediate response). But just after that the server dies with error: "An unhandled exception of type 'System.ExecutionEngineException' occurred in Unknown Module." . No stack trace, no other exception details. I'm not sure which module is causing it. Any clues?

 

Thanks

Coordinator
Mar 4, 2011 at 5:11 AM
Edited Mar 4, 2011 at 5:12 AM

I have got it now and then in the past. Try upgrading your .Net framework since something is causing a bug in it. Since it's .net itself that crashes you can't get a stack trace and I never found out why I got it (and therefore I do not know how I got rid of it).

 

Not very helpful, i know.