Advertisement
Guest User

Elixir http server

a guest
Aug 22nd, 2019
167
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 0.78 KB | None | 0 0
  1. defmodule Server do
  2.   @response "HTTP/1.1 200 Ok\r\nContent-Length: 11\r\n\r\nHello World"
  3.  
  4.   def run(port \\ 12345) do
  5.     opts = [:binary, packet: :raw, active: false, reuseaddr: true]
  6.     {:ok, server_socket} = :gen_tcp.listen(port, opts)
  7.     IO.puts "Listening on :#{port}"
  8.     accept_loop(server_socket)
  9.   end
  10.  
  11.   defp accept_loop(server) do
  12.     {:ok, client} = :gen_tcp.accept(server)
  13.     :inet.setopts(client, [nodelay: true])
  14.     spawn(__MODULE__, :client, [client])
  15.     accept_loop(server)
  16.   end
  17.  
  18.   def client(socket), do:
  19.     with(
  20.       {:ok, data} <- :gen_tcp.recv(socket, 0),
  21.       requests <- data |> String.split("\r\n\r\n") |> length(),
  22.       :ok <- :gen_tcp.send(socket, List.duplicate(@response, requests)),
  23.       do: client(socket)
  24.     )
  25. end
  26. Server.run()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement