2015年9月20日 星期日

Erlang SSL Socket server

I cannot find a good example on Internet to create an SSL socket server in Erlang.  The following example here is a good one but  ... it doesn't work.  Thus, I create my owned one and test it with another erlang shell (client).

Hope this is helpful for anyone who are suffering on Erlang TLS Socket connection ...


-module(tls_socket_server).
-export([start/0]).

start() ->
  ssl:start(),
  server(4000)
.

server(Port) ->
  SockOpts = [{certfile,"certfile.pem"}, {keyfile, "keyfile.pem"}, {reuseaddr, true}, {active, false}],
  {ok, LSocket} = ssl:listen(Port, SockOpts),
  spawn(fun() -> accept(LSocket) end).

accept(LSocket) ->
  {ok, Socket} = ssl:transport_accept(LSocket),
  Pid = spawn(fun() ->
    ssl:ssl_accept(Socket),
    loop(Socket)
  end),
  ssl:controlling_process(Socket, Pid),
  accept(LSocket).

loop(Socket) ->
  case ssl:recv(Socket, 0) of
    {ok, Data} ->
      io:format("Got packet: ~p~n", [Data]),
      ssl:send(Socket, Data),
      loop(Socket);
    Error ->
      io:format("Error on socket: ~p~n", [Error])
  end
.
Besides, if you are using R16* versions of Erlang, the TLS socket handshake will always crash. It's an Erlang BUG. See here

Reference:

  • http://erlycoder.com/89/erlang-ssl-sockets-example-ssl-echo-server-ssl-client-

沒有留言: