(** Gestion d'une connexion *) let treat_connection f socket = let buffer_size = 4096 in let buffer = String.create buffer_size in let rec treat () = match read socket buffer 0 buffer_size with | 0 -> close socket | nb -> let v = f (String.sub buffer 0 nb) in ignore (write socket v 0 nb); treat () in treat ();; (** Conversion d'une chaîne de caratères en n° de port tcp *) 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");; (** Récupération des arguments *) let main () = if Array.length Sys.argv <> 2 then begin prerr_endline ("Usage: "^Sys.argv.(0)^" port"); exit 1 end else try establish_iterative_server (treat_connection String.uppercase) (port_of_string Sys.argv.(1)) with Failure "port_of_string" -> prerr_endline ("Unknown port: "^Sys.argv.(2)); exit 2;; handle_unix_error main ();; |