How to build a non-blocking TCP server with ssl encryption

The non-blocking TCP server on trapexit.org explains how to create a server based on tcp_gen, but I want to change this example and make it work with ssl. At the moment, I absolutely do not know how to replace

  {ok, Ref} = prim_inet: async_accept (Listen_socket, -1) 
+4
source share
2 answers

simple echo_ssl with multi-threaded

-module(echo_ssl). -compile([export_all]). main() -> application:start(crypto), application:start(ssl), ssl:seed("TODO random here"), {ok, ListenSocket} = ssl:listen(2840, [ {ssl_imp, new}, {active, false}, {verify, 0}, {mode,binary}, {cacertfile, "certs/etc/server/cacerts.pem"}, {certfile, "certs/etc/server/cert.pem"}, {keyfile, "certs/etc/server/key.pem"} ]), io:format("ready to accept connections at port 2840 ~p\n", [ListenSocket]), server_loop(ListenSocket). server_loop(ListenSocket) -> {ok, Socket} = ssl:transport_accept(ListenSocket), io:format("accepted connection from ~p\n", [ssl:peername(Socket)]), ssl:ssl_accept(Socket), spawn(fun() -> loop(Socket) end), server_loop(ListenSocket). loop(Socket) -> io:format("waiting for packet~n"), case ssl:recv(Socket, 1000, 2000) of {ok, Data} -> io:format("received data: ~s~n", [binary_to_list(Data)]), Return = ssl:send(Socket, Data), io:format("sending ~p~n", [Return]), loop(Socket); {error, timeout} -> loop(Socket); Else -> io:format("crap ~p~n",[Else]) end. 
+6
source

Do not replace it with anything. Instead, connect your input and output to an SSL handler.

spender is right, SSL uses TCP for transport.

Here, someone seems to have implemented SSL over asynchronous TCP .

+2
source

All Articles