553341aa创建于 2024年2月8日历史提交
open Riot

let server port socket =
  Logger.debug (fun f -> f "Started server on %d" port);
  let _conn, _addr = Net.Tcp_listener.accept socket |> Result.get_ok in
  Logger.debug (fun f -> f "accepted connection");
  receive () |> ignore;
  ()

let () =
  Riot.run @@ fun () ->
  let _ = Logger.start () |> Result.get_ok in
  Logger.set_log_level (Some Info);
  let socket, server_port = Port_finder.next_open_port () in
  let _server = spawn (fun () -> server server_port socket) in

  let addr = Net.Addr.(tcp loopback server_port) in
  let socket = Net.Tcp_stream.connect addr |> Result.get_ok in
  Logger.debug (fun f -> f "connected");

  let buf = IO.Bytes.with_capacity 10 in
  let reader = Net.Tcp_stream.to_reader ~timeout:10L socket in
  (match IO.read reader buf with
  | exception Syscall_timeout ->
      Logger.debug (fun f -> f "receive timeout works")
  | Ok _ ->
      Logger.error (fun f -> f "receive timeout received something?");
      sleep 0.2;
      Stdlib.exit 1
  | Error err ->
      Logger.error (fun f -> f "receive timeout errored: %a" IO.pp_err err);
      sleep 0.2;
      Stdlib.exit 1);

  let bufs = IO.Iovec.with_capacity 1024 in
  let writer = Net.Tcp_stream.to_writer ~timeout:10L socket in
  (match IO.write_owned_vectored ~bufs writer with
  | exception Syscall_timeout -> Logger.debug (fun f -> f "send timeout works")
  | Ok bytes ->
      Logger.error (fun f -> f "send timeout sent %d bytes?" bytes);
      sleep 0.2;
      Stdlib.exit 1
  | Error err ->
      Logger.error (fun f -> f "send timeout errored: %a" IO.pp_err err);
      sleep 0.2;
      Stdlib.exit 1);

  Logger.info (fun f -> f "net_reader_writer_timeout: OK");
  shutdown ()