aboutsummaryrefslogtreecommitdiffstats
path: root/src/ranch_acceptor.erl
diff options
context:
space:
mode:
authorLoïc Hoguin <[email protected]>2012-12-24 16:09:40 +0100
committerLoïc Hoguin <[email protected]>2012-12-24 16:09:40 +0100
commit9993923c40b96ab07752ec36692dc09c4c7648e9 (patch)
tree7df91a8df7f0ef5ee4a6883e723fe0d86fa9ff83 /src/ranch_acceptor.erl
parent058ad09e8b2c885a0888bda47459acd32ece917e (diff)
downloadranch-9993923c40b96ab07752ec36692dc09c4c7648e9.tar.gz
ranch-9993923c40b96ab07752ec36692dc09c4c7648e9.tar.bz2
ranch-9993923c40b96ab07752ec36692dc09c4c7648e9.zip
Add ranch:set_max_connections/2 and get_max_connections/1
Diffstat (limited to 'src/ranch_acceptor.erl')
-rw-r--r--src/ranch_acceptor.erl25
1 files changed, 17 insertions, 8 deletions
diff --git a/src/ranch_acceptor.erl b/src/ranch_acceptor.erl
index d208a7f..1985826 100644
--- a/src/ranch_acceptor.erl
+++ b/src/ranch_acceptor.erl
@@ -57,22 +57,31 @@ loop(LSocket, Transport, Protocol, MaxConns, Opts, ListenerPid, ConnsSup) ->
Transport:controlling_process(CSocket, ConnPid),
ConnPid ! {shoot, ListenerPid},
NbConns = ranch_listener:add_connection(ListenerPid, ConnPid),
- maybe_wait(ListenerPid, MaxConns, NbConns),
+ {ok, MaxConns2} = maybe_wait(ListenerPid, MaxConns, NbConns),
?MODULE:init(LSocket, Transport, Protocol,
- MaxConns, Opts, ListenerPid, ConnsSup);
+ MaxConns2, Opts, ListenerPid, ConnsSup);
+ %% Upgrade the max number of connections allowed concurrently.
+ {set_max_conns, MaxConns2} ->
+ ?MODULE:loop(LSocket, Transport, Protocol,
+ MaxConns2, Opts, ListenerPid, ConnsSup);
%% Upgrade the protocol options.
{set_opts, Opts2} ->
?MODULE:loop(LSocket, Transport, Protocol,
MaxConns, Opts2, ListenerPid, ConnsSup)
end.
--spec maybe_wait(pid(), non_neg_integer(), non_neg_integer()) -> ok.
+-spec maybe_wait(pid(), non_neg_integer(), non_neg_integer())
+ -> {ok, non_neg_integer()}.
maybe_wait(_, MaxConns, NbConns) when MaxConns > NbConns ->
- ok;
-maybe_wait(ListenerPid, MaxConns, _) ->
- erlang:yield(),
- NbConns2 = ranch_server:count_connections(ListenerPid),
- maybe_wait(ListenerPid, MaxConns, NbConns2).
+ {ok, MaxConns};
+maybe_wait(ListenerPid, MaxConns, NbConns) ->
+ receive
+ {set_max_conns, MaxConns2} ->
+ maybe_wait(ListenerPid, MaxConns2, NbConns)
+ after 0 ->
+ NbConns2 = ranch_server:count_connections(ListenerPid),
+ maybe_wait(ListenerPid, MaxConns, NbConns2)
+ end.
-spec async_accept(inet:socket(), module()) -> ok.
async_accept(LSocket, Transport) ->