projects
/
project
/
uhttpd.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
poll read data after connect as well
[project/uhttpd.git]
/
client.c
diff --git
a/client.c
b/client.c
index
384f8d4
..
d1584f9
100644
(file)
--- a/
client.c
+++ b/
client.c
@@
-92,11
+92,18
@@
static void uh_set_client_timeout(struct client *cl, int timeout)
static void uh_keepalive_poll_cb(struct uloop_timeout *timeout)
{
struct client *cl = container_of(timeout, struct client, timeout);
static void uh_keepalive_poll_cb(struct uloop_timeout *timeout)
{
struct client *cl = container_of(timeout, struct client, timeout);
+ int sec = cl->requests > 0 ? conf.http_keepalive : conf.network_timeout;
- uh_set_client_timeout(cl,
conf.http_keepalive
);
+ uh_set_client_timeout(cl,
sec
);
cl->us->notify_read(cl->us, 0);
}
cl->us->notify_read(cl->us, 0);
}
+static void uh_poll_connection(struct client *cl)
+{
+ cl->timeout.cb = uh_keepalive_poll_cb;
+ uloop_timeout_set(&cl->timeout, 1);
+}
+
void uh_request_done(struct client *cl)
{
uh_chunk_eof(cl);
void uh_request_done(struct client *cl)
{
uh_chunk_eof(cl);
@@
-108,8
+115,8
@@
void uh_request_done(struct client *cl)
return uh_connection_close(cl);
cl->state = CLIENT_STATE_INIT;
return uh_connection_close(cl);
cl->state = CLIENT_STATE_INIT;
- cl->
timeout.cb = uh_keepalive_poll_cb
;
- u
loop_timeout_set(&cl->timeout, 1
);
+ cl->
requests++
;
+ u
h_poll_connection(cl
);
}
void __printf(4, 5)
}
void __printf(4, 5)
@@
-550,7
+557,7
@@
bool uh_accept_client(int fd, bool tls)
cl->us->string_data = true;
ustream_fd_init(&cl->sfd, sfd);
cl->us->string_data = true;
ustream_fd_init(&cl->sfd, sfd);
- uh_
set_client_timeout(cl, conf.network_timeout
);
+ uh_
poll_connection(cl
);
list_add_tail(&cl->list, &clients);
next_client = NULL;
list_add_tail(&cl->list, &clients);
next_client = NULL;