2009-09-21 65 views

回答

2

不要用任何東西代替它。請將您的輸入和輸出連接到SSL處理程序。

spender是對的,SSL使用TCP進行傳輸。

這裏有人似乎已經實施SSL over async TCP

6

多線程

-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.