aboutsummaryrefslogtreecommitdiff
path: root/lib/octonetcat/servers/echo.ex
blob: e416d9d616b7209f95429d84038aa48303622719 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
defmodule Octonetcat.Echo do
  @moduledoc """
  Echo TCP Socket Server

  Started under a task supervisor, lives for the life of the socket,
  dies on failure or disconnect.
  """

  require Logger

  def serve(socket) do
    socket
    |> read_line()
    |> write_line!(socket)

    serve(socket)
  end

  def read_line(socket) do
    case :gen_tcp.recv(socket, 0) do
      {:ok, line} -> line
      {:error, reason} ->
        Logger.error(reason)
        Process.exit(self(), :normal)
    end
  end

  def write_line!(line, socket) do
    :gen_tcp.send(socket, line)
  end
 end