diff --git a/src/auth.c b/src/auth.c index 8825d76..d425d29 100644 --- a/src/auth.c +++ b/src/auth.c @@ -475,6 +475,7 @@ int startconnlims (struct clientparam *param){ uint64_t rating; int ret = 0; + param->connlim = 1; pthread_mutex_lock(&connlim_mutex); for(ce = conf.connlimiter; ce; ce = ce->next) { if(ACLmatches(ce->ace, param)){ @@ -659,7 +660,7 @@ int alwaysauth(struct clientparam * param){ int countout = 0; - if(conf.connlimiter && param->remsock == INVALID_SOCKET && startconnlims(param)) return 10; + if(conf.connlimiter && !param->connlim && startconnlims(param)) return 10; res = doconnect(param); if(!res){ if(conf.bandlimfunc && (conf.bandlimiter||conf.bandlimiterout)){ diff --git a/src/proxymain.c b/src/proxymain.c index e0ba773..146b4eb 100644 --- a/src/proxymain.c +++ b/src/proxymain.c @@ -1025,7 +1025,7 @@ void freeparam(struct clientparam * param) { } myfree(param->filters); } - if(conf.connlimiter && (param->res != 10 || param->remsock != INVALID_SOCKET)) stopconnlims(param); + if(param->connlim) stopconnlims(param); #endif if(param->clibuf) myfree(param->clibuf); if(param->srvbuf) myfree(param->srvbuf); diff --git a/src/structures.h b/src/structures.h index 8d41374..82c910a 100644 --- a/src/structures.h +++ b/src/structures.h @@ -523,7 +523,8 @@ struct clientparam { transparent, chunked, paused, - version; + version, + connlim; unsigned char *hostname, *username,