open Unix;; open Sys;; open Printf;; let client host port = let server = ADDR_INET (host,port) in let client = socket PF_INET SOCK_DGRAM 0 in let buffer_size = 1024 in let buffer = String.create buffer_size in connect client server; setsockopt_float client SO_RCVTIMEO 1.; let rec process_loop () = let s = read_line () in let len = String.length s in if len == 0 then () else begin if len < buffer_size then begin ignore (write client s 0 (String.length s)); try let n = read client buffer 0 buffer_size in output Pervasives.stdout buffer 0 n; print_newline (); with Unix_error (EAGAIN,"read",_) -> prerr_endline "Timeout" end else prerr_endline "String too long"; process_loop () end in process_loop();; let port_of_string port = try try (getservbyname port "tcp").s_port with Not_found -> int_of_string port with _ -> raise (Failure "port_of_string");; let inet_addr_of_name machine = try (gethostbyname machine).h_addr_list.(0) with _ -> raise (Failure "inet_addr_of_name");; let main () = if Array.length Sys.argv <> 3 then begin prerr_endline ("Usage: "^Sys.argv.(0)^" machine port"); exit 1 end else try let addr = inet_addr_of_name Sys.argv.(1) in let port = port_of_string Sys.argv.(2) in client addr port with Failure "inet_addr_of_name" -> prerr_endline ("Unknown host: "^Sys.argv.(1)); exit 2 | Failure "port_of_string" -> prerr_endline ("Unknown port: "^Sys.argv.(2)); exit 3;; handle_unix_error main ();; |