let rec copy_blocks buffer r w = match%lwt Lwt_io.read_into r buffer 0 (Bytes.length buffer) with | 0 -> Lwt.return_unit | bytes_read -> let%lwt () = Lwt_io.write_from_exactly w buffer 0 bytes_read in copy_blocks buffer r w let run () = ((let%lwt server = Lwt_io.establish_server (Lwt_unix.ADDR_INET (Unix.inet_addr_any, 8765)) (fun (r, w) -> let buffer = Bytes.create (16 * 1024) in copy_blocks buffer r w) in Lwt.return server) : Lwt_io.server Lwt.t) |> ignore let () = Lwt_main.run run ();