Skip to content

Instantly share code, notes, and snippets.

@gustin
Forked from ashleyconnor/Elixir
Created June 28, 2017 14:36
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save gustin/b10621f01933c9602865f739c6e8dec7 to your computer and use it in GitHub Desktop.
Save gustin/b10621f01933c9602865f739c6e8dec7 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