OCaml で echo

OCaml でとりあえず echo サーバを作ってみた。

なんというか、普通なので特に言うこともない。

ソース

open Printf


let echoMain fp =
  (* recv -> print -> send するだけ *)
  let buf : string = String.create 512 in
  let len = Unix.recv fp buf 0 512 [] in
  let sendsize = Unix.send fp buf 0 len [] in
  printf "%d\n" len;
  printf "%s\n" (String.sub buf 0 len);
  flush stdout;
  Unix.close fp;
  ();;


let main () =
  (* socket 開いて listen するだけ *)
  let sock = Unix.socket Unix.PF_INET Unix.SOCK_STREAM 0 in
  Unix.setsockopt sock Unix.SO_REUSEADDR true;
  Unix.bind sock (Unix.ADDR_INET(Unix.inet_addr_any, 8888));
  Unix.listen sock 100;

  printf "listen in 8888\n";

  flush stdout;

  while true do
    try
      let conn, addr = Unix.accept sock in
      let _ =
        Thread.create
          echoMain
          conn
      in ()

    with
      Unix.Unix_error(Unix.EINTR, _, _) -> ()
  done;
  ();
;;

main();;

ビルドは

$ ocamlfind ocamlc -linkpkg -package unix,threads,netstring -thread echo.ml

でできる。