(** Connect to addr and port and start communicating **) let nc addr port = let rec discuss csock = let aux input output = let buffer = Bytes.create 256 in let n = Unix.read input buffer 0 (Bytes.length buffer) in match n with | 0 -> () | _ -> ignore (Unix.write output buffer 0 n); discuss csock in match Unix.select [Unix.stdin; csock] [] [] (-1.) with | (fds, _, _) -> ( match List.hd fds == Unix.stdin with | true -> aux Unix.stdin csock | false -> aux csock Unix.stdout ) in let sock = Unix.socket Unix.PF_INET Unix.SOCK_STREAM 0 in Unix.connect sock (Unix.ADDR_INET (Unix.inet_addr_of_string addr, port)); discuss sock let () = match Array.length Sys.argv with | 3 -> nc Sys.argv.(1) (int_of_string Sys.argv.(2)) | _ -> raise (Failure "Usage error")