mte/unikernel/duniverse/happy-eyeballs/app/test.ml
2025-11-11 02:07:51 +01:00

43 lines
1.2 KiB
OCaml

open Lwt.Infix
let jump () host ports =
let t = Happy_eyeballs_lwt.create () in
Lwt_main.run (
Logs.app (fun m -> m "connecting to %s (on ports %a)" host
Fmt.(list ~sep:(any ", ") int) ports);
Happy_eyeballs_lwt.connect t host ports >>= function
| Ok ((ip, port), fd) ->
Logs.app (fun m -> m "connected to %a:%d" Ipaddr.pp ip port);
Lwt_unix.close fd >|= fun () ->
Ok ()
| Error `Msg msg as e ->
Logs.app (fun m -> m "failed to connect %s" msg);
Lwt.return e)
let setup_log style_renderer level =
Fmt_tty.setup_std_outputs ?style_renderer ();
Logs.set_level level;
Logs.set_reporter (Logs_fmt.reporter ~dst:Format.std_formatter ())
open Cmdliner
let setup_log =
Term.(const setup_log
$ Fmt_cli.style_renderer ()
$ Logs_cli.level ())
let host =
let doc = "Host to connect to" in
Arg.(required & pos 0 (some string) None & info [] ~doc ~docv:"HOST")
let port =
let doc = "Ports to connect to" in
Arg.(value & opt_all int [443;80] & info [ "port" ] ~doc ~docv:"PORT")
let cmd =
let term = Term.(term_result (const jump $ setup_log $ host $ port))
and info = Cmd.info "test" ~version:"2.0.1"
in
Cmd.v info term
let () = exit (Cmd.eval cmd)