
On 25.07.2013 16:37, Daniel P. Berrange wrote:
On Thu, Jul 25, 2013 at 04:23:32PM +0200, Michal Privoznik wrote:
Currently, even if max_client limit is hit, we accept() incoming connection request, but close it immediately. This has disadvantage of not using listen() queue. We should accept() only those clients we know we can serve and let all other wait in the (limited) queue. --- src/rpc/virnetserver.c | 40 ++++++++++++++++++++++++++++++++++++++++ src/rpc/virnetserverservice.c | 9 +++++++++ src/rpc/virnetserverservice.h | 4 ++++ 3 files changed, 53 insertions(+)
+ if (svc->dispatchCheckFunc && + svc->dispatchCheckFunc(svc, sock, svc->dispatchOpaque) < 0) { + /* Accept declined */ + goto cleanup; + } +
Rather than having this callback, can we not simply change virNetServerAddClient() to call virNetServerUpdateServices(srv, false); when a new client causes us to hit the max limit ?
No, because that callback is called *after* accept() which I am trying to avoid. Michal
Daniel