let main =
  Random.self_init();
  export_type := HtmlJscpt;
  Sys.set_signal Sys.sigpipe Sys.Signal_ignore;

  (* Actually parse args and set channel *)
  parse_args();

  let config : http_reactor_config =
    object
      method config_timeout_next_request = 0.4
      method config_timeout = 300.0
      method config_reactor_synch = `Write
      method config_cgi = Netcgi_env.default_config
      method config_error_response n = "<html>Error " ^ string_of_int n ^ "</html>"
      method config_log_error _ _ _ _ msg =
        Printf.printf "Error log: %s\n" msg
      method config_max_reqline_length = 256
      method config_max_header_length = 32768
      method config_max_trailer_length = 32768
      method config_limit_pipeline_length = 5
      method config_limit_pipeline_size = 250000
      method config_announce_server = `Ocamlnet
    end in

  let master_sock = Unix.socket Unix.PF_INET Unix.SOCK_STREAM 0 in
  Unix.setsockopt master_sock Unix.SO_REUSEADDR true;
  Unix.bind master_sock (Unix.ADDR_INET(Unix.inet_addr_any, 8765));
  Unix.listen master_sock 100;
  let tim = Unix.localtime(Unix.time()) in
  Printf.printf "-----   : Server start at %d:%02d:%02d - %02d/%02d/%d\n" 
    (tim.Unix.tm_hour) (tim.Unix.tm_min) (tim.Unix.tm_sec)
    (tim.Unix.tm_mday) (tim.Unix.tm_mon + 1) (tim.Unix.tm_year + 1900);
  Printf.printf "Server  : Listening on port 8765\n";
  flush stdout;
  while true do
    try
      let conn_sock, _ = Unix.accept master_sock in
        Unix.set_nonblock conn_sock;
        process_connection config conn_sock srv;
    with
        Unix.Unix_error(Unix.EINTR,_,_) -> ()  (* ignore *)
  done