Guest User

Untitled

a guest
May 24th, 2018
116
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.90 KB | None | 0 0
  1. open Core
  2. open Async
  3.  
  4. (* Copy data from the reader to the writer, using the provided buffer
  5. as scratch space *)
  6. let rec copy_blocks buffer r w =
  7. Reader.read r buffer
  8. >>= function
  9. | `Eof -> return ()
  10. | `Ok bytes_read ->
  11. Writer.write w (Bytes.to_string buffer) ~len:bytes_read;
  12. Writer.flushed w
  13. >>= fun () ->
  14. copy_blocks buffer r w
  15.  
  16. (* part 1 *)
  17. (** Starts a TCP server, which listens on the specified port, invoking
  18. copy_blocks every time a client connects. *)
  19. let run () =
  20. let host_and_port =
  21. Tcp.Server.create
  22. ~on_handler_error:`Raise
  23. (Tcp.Where_to_listen.of_port 8765)
  24. (fun _addr r w ->
  25. let buffer = Bytes.create (16 * 1024) in
  26. copy_blocks buffer r w)
  27. in
  28. ignore (host_and_port : (Socket.Address.Inet.t, int) Tcp.Server.t Deferred.t)
  29.  
  30. (* part 2 *)
  31. (* Call [run], and then start the scheduler *)
  32. let () =
  33. run ();
  34. never_returns (Scheduler.go ())
Add Comment
Please, Sign In to add comment