Echo TCP server in Elixir

Thanks to Erlang and OTP this is so straightforward.

defmodule EchoTcp do
def start(port) do
{:ok, socket} =
:gen_tcp.listen(port, [:binary, packet: :line, active: false, reuseaddr: true])
IO.puts("Echo server listening on port #{port}")
accept_loop(socket)
end
defp accept_loop(socket) do
{:ok, client} = :gen_tcp.accept(socket)
spawn(fn -> handle_client(client) end)
accept_loop(socket)
end
defp handle_client(socket) do
case :gen_tcp.recv(socket, 0) do
{:ok, data} ->
:gen_tcp.send(socket, data)
handle_client(socket)
{:error, :closed} ->
IO.puts("Client disconnected")
{:error, reason} ->
IO.puts("Error: #{inspect(reason)}")
end
end
end
Back to notes