projects
/
project
/
uhttpd.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
fix resuming accept() calls after exceeding client limit
[project/uhttpd.git]
/
listen.c
diff --git
a/listen.c
b/listen.c
index
c4b6b2b
..
f11768a
100644
(file)
--- a/
listen.c
+++ b/
listen.c
@@
-56,7
+56,7
@@
void uh_unblock_listeners(void)
{
struct listener *l;
{
struct listener *l;
- if (
!n_blocked && conf.max_requests &&
+ if (
(!n_blocked && conf.max_requests) ||
n_clients >= conf.max_requests)
return;
n_clients >= conf.max_requests)
return;
@@
-64,6
+64,10
@@
void uh_unblock_listeners(void)
if (!l->blocked)
continue;
if (!l->blocked)
continue;
+ l->fd.cb(&l->fd, ULOOP_READ);
+ if (n_clients >= conf.max_requests)
+ break;
+
n_blocked--;
l->blocked = false;
uloop_fd_add(&l->fd, ULOOP_READ);
n_blocked--;
l->blocked = false;
uloop_fd_add(&l->fd, ULOOP_READ);
@@
-74,7
+78,10
@@
static void listener_cb(struct uloop_fd *fd, unsigned int events)
{
struct listener *l = container_of(fd, struct listener, fd);
{
struct listener *l = container_of(fd, struct listener, fd);
- uh_accept_client(fd->fd);
+ while (1) {
+ if (!uh_accept_client(fd->fd))
+ break;
+ }
if (conf.max_requests && n_clients >= conf.max_requests)
uh_block_listener(l);
if (conf.max_requests && n_clients >= conf.max_requests)
uh_block_listener(l);