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-