Skip to content

Instantly share code, notes, and snippets.

@ashleyconnor
Last active October 31, 2021 12:11
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save ashleyconnor/43e8b0ea0f46c3745f35 to your computer and use it in GitHub Desktop.
Save ashleyconnor/43e8b0ea0f46c3745f35 to your computer and use it in GitHub Desktop.
Elixir Socket Example
defmodule SocketPlayground do
def listen(port) do
listen(port, &handler/1)
end
def listen(port, handler) do
IO.puts "listen"
Socket.TCP.listen!(port, packet: :line)
|> accept(handler)
end
def accept(listening_socket, handler) do
IO.puts "accept"
socket = Socket.TCP.accept!(listening_socket)
spawn(fn -> handle(socket, handler) end)
accept(listening_socket, handler)
end
def handle(socket, handler) do
IO.puts "handle"
incoming = Socket.Stream.recv!(socket)
socket |> Socket.Stream.send!(handler.(incoming))
handle(socket, handler)
end
def handler(line) do
String.upcase(line)
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment