12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273leterror_msgffmt=Fmt.kstr(funmsg->Error(`Msgmsg))fmtletport=ref8080letinet_addr=refUnix.inet_addr_loopbackletbacklog=ref64letpid=refNoneletdomains=refNoneletsetup_configdomains'port'inet_addr'backlog'pid'=port:=port';inet_addr:=inet_addr';backlog:=backlog';pid:=pid';domains:=domains'letconfig_from_globals()=letsockaddr=Unix.(ADDR_INET(!inet_addr,!port))inVif_config.config?domains:!domains?pid:!pid~backlog:!backlogsockaddropenCmdlinerletport=letdoc="The port used by the HTTP server."inletopenArginvalue&optint8080&info["p";"port"]~doc~docv:"PORT"letinet_addr=letdoc="The address to bind the HTTP server."inletparserstr=tryOk(Unix.inet_addr_of_stringstr)with_->error_msgf"Invalid inet-addr: %S"strinletppppfinet_addr=Fmt.stringppf(Unix.string_of_inet_addrinet_addr)inletinet_addr=Arg.conv(parser,pp)inletopenArginvalue&optinet_addrUnix.inet_addr_loopback&info["i";"inet-addr"]~doc~docv:"INET_ADDR"letis_not_directorystr=(Sys.file_existsstr&&Sys.is_directorystr=false)||Sys.file_existsstr=falseletpid=letdoc="Specify a file to record its process-id in."inletnon_existing_file=letparserstr=matchFpath.of_stringstrwith|Ok_asvwhenis_not_directorystr->v|Okv->error_msgf"%a already exists as a directory"Fpath.ppv|Error_aserr->errinArg.conv(parser,Fpath.pp)inletopenArginvalue&opt(somenon_existing_file)None&info["pid-file"]~doc~docv:"PATH"letdomains=letdoc="The number of number used by vif."inletopenArginvalue&opt(someint)None&info["domains"]~doc~docv:"DOMAINS"letbacklog=letdoc="The limit of outstanding connections in the socket's listen queue."inletopenArginvalue&optint64&info["backlog"]~doc~docv:"NUMBER"letsetup_config=letopenTerminconstsetup_config$domains$port$inet_addr$backlog$pid