libmicrohttpd
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [libmicrohttpd] Connection: Keep-Alive


From: Christian Grothoff
Subject: Re: [libmicrohttpd] Connection: Keep-Alive
Date: Thu, 08 Aug 2013 07:59:18 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130704 Icedove/17.0.7

Hi!

First if all, thanks for reporting. I found one issue where I had recently missed a check, could you try with SVN 28450? This might / should fix your problem.

Second, in a production setting, the HTTP spec says that you must not turn of the 'date' header (as you do in your example code), unless you
do not have an RTC on your system.  So you might want to not set that
option in your test.

Finally, MHD_USE_EPOLL_TURBO can make MHD _slower_ unless you're really
running your systems at extremely high loads.  So for most servers, this
setting is also not a good idea.

Happy hacking!

Christian

On 08/07/13 21:28, Derrick Bradbury wrote:
Hi all...

I've been putting together an app that requires a persistant connection
for 30 seconds, drop and re-establish.

Everything is working except for the keepalive...

 From everything I've read, HTTP/1.1 should have keepalive enabled by
default, and in MHD, you must close it by adding the header (Connection:
close).

Problem is, that when I get a request, the header has a "keep-alive"
request, but MHD returns a "Connection: close"...

* About to connect() to 127.0.0.1 port 5000 (#0)
*   Trying 127.0.0.1... connected
* Connected to 127.0.0.1 (127.0.0.1) port 5000 (#0)
 > GET /ready.html HTTP/1.1
 > User-Agent: curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7
NSS/3.14.0.0 zlib/1.2.3 libidn/1.18 libssh2/1.4.2
 > Host: 127.0.0.1:5000
 > Accept: */*
 > Connection: Keep-Alive
 >
< HTTP/1.1 200 OK
< Connection: close
< Content-Length: 2
<
1
* Closing connection #0
* About to connect() to 127.0.0.1 port 5000 (#0)
*   Trying 127.0.0.1... connected
* Connected to 127.0.0.1 (127.0.0.1) port 5000 (#0)
 > GET /classify.html?url=ibm.com HTTP/1.1
 > User-Agent: curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7
NSS/3.14.0.0 zlib/1.2.3 libidn/1.18 libssh2/1.4.2
 > Host: 127.0.0.1:5000
 > Accept: */*
 > Connection: Keep-Alive
 >
< HTTP/1.1 200 OK
< Connection: close
< Content-Length: 6
<
33
66
* Closing connection #0


If I manually add a "Connection: Keep-Alive" header, the client thinks
there should be a persistant connection, but the server still closes the
connection:

* About to connect() to 127.0.0.1 port 5000 (#0)
*   Trying 127.0.0.1... connected
* Connected to 127.0.0.1 (127.0.0.1) port 5000 (#0)
 > GET /ready.html HTTP/1.1
 > User-Agent: curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7
NSS/3.14.0.0 zlib/1.2.3 libidn/1.18 libssh2/1.4.2
 > Host: 127.0.0.1:5000
 > Accept: */*
 > Connection: Keep-Alive
 >
< HTTP/1.1 200 OK
< Content-Length: 2
< Connection: keep-alive
<
1
* Connection #0 to host 127.0.0.1 left intact
* Connection #0 seems to be dead!
* Closing connection #0
* About to connect() to 127.0.0.1 port 5000 (#0)
*   Trying 127.0.0.1... connected
* Connected to 127.0.0.1 (127.0.0.1) port 5000 (#0)
 > GET /classify.html?url=ibm.com HTTP/1.1
 > User-Agent: curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7
NSS/3.14.0.0 zlib/1.2.3 libidn/1.18 libssh2/1.4.2
 > Host: 127.0.0.1:5000
 > Accept: */*
 > Connection: Keep-Alive
 >
< HTTP/1.1 200 OK
< Content-Length: 4
< Connection: keep-alive
<
998
* Connection #0 to host 127.0.0.1 left intact
* Connection #0 seems to be dead!
* Closing connection #0



Here is my daemon definition:
   daemon = MHD_start_daemon (MHD_USE_SELECT_INTERNALLY |
MHD_SUPPRESS_DATE_NO_CLOCK
                         | MHD_USE_EPOLL_LINUX_ONLY | MHD_USE_EPOLL_TURBO,
                         options.port,
                         NULL, NULL, &answer_to_connection, NULL,
                         MHD_OPTION_THREAD_POOL_SIZE, (unsigned int)
options.threads,
                         MHD_OPTION_CONNECTION_LIMIT, (unsigned int)
12000, MHD_OPTION_END);


and my response being built:

  response = MHD_create_response_from_buffer (strlen (page), (void*)
page, MHD_RESPMEM_PERSISTENT);
   ret = MHD_add_response_header(response,"Connection","keep-alive");

   ret = MHD_queue_response (connection, MHD_HTTP_OK, response);

   MHD_destroy_response (response);


Am I needing a different response, or setting?

Thanks!
Derrick






reply via email to

[Prev in Thread] Current Thread [Next in Thread]