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 kens...@gmail.com 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.
.
HTMLHEAD
TITLE400 Bad Request/TITLE
/HEADBODY
H1Method Not Implemented/H1
Invalid method in requestP
/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
Libevent-users@monkey.org
http://lists.monkey.org:8080/listinfo/libevent-users
___
Libevent-users mailing list
Libevent-users@monkey.org
http://lists.monkey.org:8080/listinfo/libevent-users