(** Conversion d'une adresse en chaîne de caractères *)
let string_of_sockaddr s = match s with
  | ADDR_UNIX s -> s
  | ADDR_INET (inet,p) -> (string_of_inet_addr inet)^":"^(string_of_int p);;

(** Serveur TCP itératif appliquant une fonction sur les données reçues
   avant de les renvoyer *)
let rec establish_iterative_server f port =
  let socket_server = open_server port in
  let rec server () =
    let socket_connection,client_addr = accept socket_server in
    Printf.eprintf "Connection from %s.\n" (string_of_sockaddr client_addr);
    Pervasives.flush Pervasives.stderr;
    f socket_connection;
    server ()
  in server ();;