blob: 46552a4bd9897457a01828b0616584694ab9ffff (
plain) (
tree)
|
|
defmodule SNet.TCPServer do
require Logger
use Task, restart: :permanent
def start_link(port) do
Task.start_link(__MODULE__, :accept, [port])
end
@doc """
Starts accepting connections on the given `port`.
"""
def accept(port) do
{:ok, socket} = :gen_tcp.listen(port,
[:binary, packet: 2, active: false, reuseaddr: true])
Logger.info "Accepting connections on port #{port}"
loop_acceptor(socket, port)
end
defp loop_acceptor(socket, my_port) do
{:ok, client} = :gen_tcp.accept(socket)
{:ok, pid} = DynamicSupervisor.start_child(Shard.DynamicSupervisor, {SNet.TCPConn, %{socket: client, my_port: my_port}})
:ok = :gen_tcp.controlling_process(client, pid)
loop_acceptor(socket, my_port)
end
end
|