From 435401bf7c5954f77b469478178151a8c17721c4 Mon Sep 17 00:00:00 2001 From: Max Lv Date: Mon, 10 Oct 2016 16:36:21 +0800 Subject: [PATCH] Refine auto blocking --- src/server.c | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/src/server.c b/src/server.c index 33ba8d72a..23d0d0996 100644 --- a/src/server.c +++ b/src/server.c @@ -617,24 +617,6 @@ server_recv_cb(EV_P_ ev_io *w, int revents) return; } - char *peer_name = get_peer_name(server->fd); - if (peer_name != NULL) { - if (check_block_list(peer_name, 0)) { - LOGE("block all requests from %s", peer_name); - close_and_free_remote(EV_A_ remote); - close_and_free_server(EV_A_ server); - return; - } - if (acl) { - if ((get_acl_mode() == BLACK_LIST && acl_match_host(peer_name) == 1) - || (get_acl_mode() == WHITE_LIST && acl_match_host(peer_name) >= 0)) { - LOGE("Access denied from %s", peer_name); - close_and_free_remote(EV_A_ remote); - close_and_free_server(EV_A_ server); - return; - } - } - } } else { buf->len = r; } @@ -1358,7 +1340,8 @@ new_server(int fd, listen_ctx_t *listener) server->d_ctx = NULL; } - int request_timeout = min(MAX_REQUEST_TIMEOUT, listener->timeout); + int request_timeout = min(MAX_REQUEST_TIMEOUT, listener->timeout) + + rand() % MAX_REQUEST_TIMEOUT; ev_io_init(&server->recv_ctx->io, server_recv_cb, fd, EV_READ); ev_io_init(&server->send_ctx->io, server_send_cb, fd, EV_WRITE); @@ -1457,6 +1440,23 @@ accept_cb(EV_P_ ev_io *w, int revents) return; } + char *peer_name = get_peer_name(serverfd); + if (peer_name != NULL) { + if (check_block_list(peer_name, 0)) { + LOGE("block all requests from %s", peer_name); + close(serverfd); + return; + } + if (acl) { + if ((get_acl_mode() == BLACK_LIST && acl_match_host(peer_name) == 1) + || (get_acl_mode() == WHITE_LIST && acl_match_host(peer_name) >= 0)) { + LOGE("Access denied from %s", peer_name); + close(serverfd); + return; + } + } + } + int opt = 1; setsockopt(serverfd, SOL_TCP, TCP_NODELAY, &opt, sizeof(opt)); #ifdef SO_NOSIGPIPE