X-Git-Url: http://git.archive.openwrt.org/?p=project%2Fuhttpd.git;a=blobdiff_plain;f=listen.c;h=f11768ae1bfbba2ec2e72536fc817121228053b9;hp=c4b6b2bb9faeab050ade6e257e04f463bfd3908e;hb=6384dde85bb0729137c4de3c1c994edc5d7c8091;hpb=5ee20abc0dea6e4187e212b1d8e9484f5e79f538 diff --git a/listen.c b/listen.c index c4b6b2b..f11768a 100644 --- a/listen.c +++ b/listen.c @@ -56,7 +56,7 @@ void uh_unblock_listeners(void) { struct listener *l; - if (!n_blocked && conf.max_requests && + if ((!n_blocked && conf.max_requests) || n_clients >= conf.max_requests) return; @@ -64,6 +64,10 @@ void uh_unblock_listeners(void) 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); @@ -74,7 +78,10 @@ static void listener_cb(struct uloop_fd *fd, unsigned int events) { 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);