diff options
author | Loïc Hoguin <[email protected]> | 2012-12-24 16:09:40 +0100 |
---|---|---|
committer | Loïc Hoguin <[email protected]> | 2012-12-24 16:09:40 +0100 |
commit | 9993923c40b96ab07752ec36692dc09c4c7648e9 (patch) | |
tree | 7df91a8df7f0ef5ee4a6883e723fe0d86fa9ff83 /src/ranch_acceptor.erl | |
parent | 058ad09e8b2c885a0888bda47459acd32ece917e (diff) | |
download | ranch-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.erl | 25 |
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) -> |