I think my earlier email has the fix:
Hi, there,
I suspect there is a typo/bug here. Can someone confirm one way or another?
[hz...@dev066 hphp-external]$ svn diff
downloads/libevent-1.4.11-stable/http.c
Index: downloads/libevent-1.4.11-stable/http.c
===================================================================
--- downloads/libevent-1.4.11-stable/http.c (revision 193628)
+++ downloads/libevent-1.4.11-stable/http.c (working copy)
@@ -934,7 +934,7 @@
return;
} else if (n == 0) {
/* Connection closed */
- evhttp_connection_done(evcon);
+ evhttp_connection_reset(evcon);
return;
}
-Haiping
On 12/8/09 6:11 AM, "Kenneth Cox" <[email protected]> wrote:
> Hi all, I have an http server using libevent-1.4.13-stable, running on
> Linux (Fedora 11). When I use curl to send a one-shot http request, my
> server sends two responses on the wire! This does not cause any errors in
> the client, but it concerns me that the state handling in the http server
> is not right and distracts me every time I wireshark.
>
> Has anyone else noticed this problem? Am I doing something wrong?
>
> I am debugging, but haven't gotten far yet. I do know this problem did
> not happen with an ancient version of libevent I have stashed (svn trunk
> r309). Any assistance would be much appreciated.
>
> My test is:
>
> $ curl -i localhost:18090/echo
>
> and what I see on the wire is the expected response plus one more:
>
> # ngrep -d lo -W byline port 18090
> interface: lo (127.0.0.0/255.0.0.0)
> filter: (ip) and ( port 18090 )
> ####
> T 127.0.0.1:50506 -> 127.0.0.1:18090 [AP]
> GET /echo HTTP/1.1.
> User-Agent: curl/7.15.5 (i686-redhat-linux-gnu) libcurl/7.15.5
> OpenSSL/0.9.8b zlib/1.2.3 libidn/0.6.5.
> Host: localhost:18090.
> Accept: */*.
> .
>
> ##
> T 127.0.0.1:18090 -> 127.0.0.1:50506 [AP]
> HTTP/1.1 200 OK.
> content-length: 13.
> Date: Tue, 08 Dec 2009 14:08:23 GMT.
> Content-Type: text/html; charset=ISO-8859-1.
> .
> we are here!
>
> ###
> T 127.0.0.1:18090 -> 127.0.0.1:50506 [AP]
> HTTP/1.1 400 Bad Request.
> Content-Type: text/html.
> Connection: close.
> Date: Tue, 08 Dec 2009 14:08:23 GMT.
> Content-Length: 134.
> .
> <HTML><HEAD>
> <TITLE>400 Bad Request</TITLE>
> </HEAD><BODY>
> <H1>Method Not Implemented</H1>
> Invalid method in request<P>
> </BODY></HTML>
>
> //---------------------program below-----------------------
>
> #include <stdio.h>
> #include <string.h>
> #include <stdlib.h>
> #include <unistd.h>
> #include <sys/time.h>
> #include "evhttp.h"
>
> static void
> req_set_clen(struct evhttp_request *req)
> {
> char buf[11];
> snprintf(buf, sizeof(buf), "%ld",
> (long)EVBUFFER_LENGTH(req->output_buffer));
> evhttp_add_header(req->output_headers, "content-length", buf);
> }
>
> static void
> echo_cb(struct evhttp_request *req, void *arg)
> {
> evbuffer_add_printf(req->output_buffer, "we are here!\n");
> req_set_clen(req);
> evhttp_send_reply(req, HTTP_OK, "OK", NULL);
> }
>
> int
> main(int argc, const char **argv)
> {
> event_init();
> struct evhttp *http_srv = evhttp_start(NULL, 18090);
> evhttp_set_cb(http_srv, "/echo", echo_cb, NULL);
> event_dispatch();
> return 0;
> }
>
> //--------------------------------------------
> _______________________________________________
> Libevent-users mailing list
> [email protected]
> http://lists.monkey.org:8080/listinfo/libevent-users
_______________________________________________
Libevent-users mailing list
[email protected]
http://lists.monkey.org:8080/listinfo/libevent-users