Skip to content

Instantly share code, notes, and snippets.

@pdonadeo
Created January 11, 2017 22:45
Show Gist options
  • Save pdonadeo/78eae3520fac9b7983827c8257158e31 to your computer and use it in GitHub Desktop.
Save pdonadeo/78eae3520fac9b7983827c8257158e31 to your computer and use it in GitHub Desktop.
A minimal SSL test for Async_ssl
open Core.Std
open Async.Std
open Async_ssl.Std
open Log.Global
(* ocamlbuild -use-ocamlfind -pkgs async_ssl src/test_ssl2.native *)
let get_ssl () =
(* Connect the socket *)
Tcp.connect (Tcp.to_host_and_port "github.com" 443) >>= fun (socket, net_to_ssl, ssl_to_net) ->
(* Connect SSL *)
let net_to_ssl = Reader.pipe net_to_ssl in
let ssl_to_net = Writer.pipe ssl_to_net in
let app_to_ssl, app_wr = Pipe.create () in
let app_rd, ssl_to_app = Pipe.create () in
Ssl.client
~version:Async_ssl.Ssl.Version.Tlsv1_2
~app_to_ssl
~ssl_to_app
~net_to_ssl
~ssl_to_net () |> Deferred.Or_error.ok_exn >>= fun connection ->
info "Ssl.client";
Reader.of_pipe (Info.of_string "ssl_reader") app_rd >>= fun app_rd ->
Writer.of_pipe (Info.of_string "ssl_writer") app_wr >>= fun (app_wr,_) ->
(* Wait 0.5 seconds *)
(after (sec 0.5)) >>= fun () ->
(* Close *)
don't_wait_for (
Writer.close app_wr >>= fun () ->
Reader.close app_rd >>= fun () ->
Async_ssl.Ssl.Connection.close connection;
info "Ssl.connection.close";
return ()
);
return ()
let gc_loop () =
let rec loop () =
info "Gc.compact ()";
Gc.compact ();
(after (sec 60.)) >>= loop in
loop ()
let rec loop ?(i=1) () =
info "Ssl.client number %06d" i;
get_ssl () >>= fun () ->
(after (sec 0.5)) >>= fun () ->
loop ~i:(i+1) ()
let main () =
loop () |> don't_wait_for;
gc_loop () |> don't_wait_for;
Deferred.never ()
let () = Command.(async ~summary:"SSL test 2" Spec.empty main |> run)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment