]>
git.ipfire.org Git - thirdparty/squid.git/blob - src/comm/AcceptLimiter.h
2 * Copyright (C) 1996-2018 The Squid Software Foundation and contributors
4 * Squid software is distributed under GPLv2+ license and includes
5 * contributions from numerous individuals and organizations.
6 * Please see the COPYING and CONTRIBUTORS files for details.
9 #ifndef _SQUID_SRC_COMM_ACCEPT_LIMITER_H
10 #define _SQUID_SRC_COMM_ACCEPT_LIMITER_H
12 #include "comm/TcpAcceptor.h"
20 * FIFO Queue holding listener socket handlers which have been activated
21 * ready to dupe their FD and accept() a new client connection.
22 * But when doing so there were not enough FD available to handle the
23 * new connection. These handlers are awaiting some FD to become free.
25 * defer - used only by Comm layer ConnAcceptor adding themselves when FD are limited.
26 * removeDead - used only by Comm layer ConnAcceptor to remove themselves when dying.
27 * kick - used by Comm layer when FD are closed.
33 /** retrieve the global instance of the queue. */
34 static AcceptLimiter
&Instance();
36 /** delay accepting a new client connection. */
37 void defer(const TcpAcceptor::Pointer
&afd
);
39 /** remove all records of an acceptor. Only to be called by the ConnAcceptor::swanSong() */
40 void removeDead(const TcpAcceptor::Pointer
&afd
);
42 /** try to accept and begin processing any delayed client connections. */
46 static AcceptLimiter Instance_
;
49 std::deque
<TcpAcceptor::Pointer
> deferred_
;
54 #endif /* _SQUID_SRC_COMM_ACCEPT_LIMITER_H */