Packages
ace
0.6.0
0.19.0
0.18.10
0.18.9
0.18.8
0.18.7
0.18.6
0.18.5
0.18.4
0.18.3
0.18.2
0.18.1
0.18.0
0.17.1
0.17.0
0.16.8
0.16.7
0.16.6
0.16.5
0.16.4
0.16.3
0.16.2
0.16.1
0.16.0
0.15.11
0.15.10
0.15.9
0.15.8
0.15.7
0.15.6
retired
0.15.5
0.15.4
0.15.3
0.15.2
0.15.1
0.15.0
0.14.8
0.14.7
0.14.6
0.14.5
0.14.4
0.14.3
0.14.2
0.14.1
0.14.0
0.13.1
0.13.0
0.12.1
0.12.0
retired
0.11.1
0.11.0
0.10.0
0.9.3
0.9.2
0.9.1
0.9.0
0.8.1
0.8.0
0.7.1
0.7.0
0.6.3
0.6.2
0.6.1
0.6.0
0.5.2
0.5.1
0.5.0
0.4.0
0.3.0
0.2.0
HTTP web server and client, supports http1 and http2
Current section
Files
Jump to
Current section
Files
lib/ace/tcp/governor.ex
defmodule Ace.TCP.Governor do
@moduledoc """
The governor acts to throttle the creation of servers.
A governor process starts a server under the supervision of a server supervisor.
It will then wait untill the server has accepted a connection.
Once it's server has accepted a connection the governor will start a new server.
"""
@doc """
Start a new governor, linked to the calling process.
"""
def start_link(listen_socket, server_supervisor) do
pid = spawn_link(__MODULE__, :loop, [listen_socket, server_supervisor])
{:ok, pid}
end
@doc false
def loop(listen_socket, server_supervisor) do
{:ok, server} = Supervisor.start_child(server_supervisor, [])
:ok = Ace.TCP.Server.accept(server, listen_socket)
loop(listen_socket, server_supervisor)
end
end