sig
  type unresolved =
      EAI_ADDRFAMILY
    | EAI_AGAIN
    | EAI_BADFLAGS
    | EAI_FAIL
    | EAI_FAMILY
    | EAI_MEMORY
    | EAI_NODATA
    | EAI_NONAME
    | EAI_SERVICE
    | EAI_SOCKTYPE
    | EAI_BADHINTS
    | EAI_PROTOCOL
    | EAI_UNKNOWN of int
  exception Unresolved of Cf_nameinfo.unresolved
  module P :
    sig
      module AF :
        sig
          type tag = unit
          type address
          val domain : tag Cf_socket.domain
          val to_sockaddr : address -> tag Cf_socket.sockaddr
          val of_sockaddr : tag Cf_socket.sockaddr -> address
          val unspecified : tag Cf_socket.sockaddr
        end
      module ST :
        sig type tag = unit val socktype : tag Cf_socket.socktype end
      val protocol : Cf_socket.protocol
    end
  val is_specific_socktype :
    unit Cf_socket.socktype -> 'Cf_socket.socktype -> bool
  val is_specific_domain :
    unit Cf_socket.sockaddr -> 'Cf_socket.domain -> bool
  val specialize_sockaddr :
    unit Cf_socket.sockaddr -> 'Cf_socket.domain -> 'Cf_socket.sockaddr
  type of_address_flags = {
    ni_nofqdn : bool;
    ni_numerichost : bool;
    ni_namereqd : bool;
    ni_numericserv : bool;
    ni_dgram : bool;
  }
  val of_address_default_flags : Cf_nameinfo.of_address_flags
  val of_address :
    ?host:int ->
    ?serv:int ->
    ?flags:Cf_nameinfo.of_address_flags ->
    'Cf_socket.sockaddr -> string * string
  type to_address_flags = {
    ai_passive : bool;
    ai_canonname : bool;
    ai_numerichost : bool;
  }
  val to_address_default_flags : Cf_nameinfo.to_address_flags
  type to_address_arg =
      A_nodename of string
    | A_servicename of string
    | A_bothnames of string * string
  type ('a, 'b) addrinfo = private {
    ai_flags : Cf_nameinfo.to_address_flags;
    ai_family : 'Cf_socket.domain;
    ai_socktype : 'Cf_socket.socktype;
    ai_protocol : Cf_socket.protocol;
    ai_cname : string option;
    ai_addr : 'Cf_socket.sockaddr;
  }
  val addrinfo_hint :
    ?flags:Cf_nameinfo.to_address_flags ->
    'Cf_socket.domain ->
    'Cf_socket.socktype ->
    Cf_socket.protocol -> ('a, 'b) Cf_nameinfo.addrinfo
  val addrinfo_default_hint : (unit, unit) Cf_nameinfo.addrinfo
  val to_addresses :
    ('a, 'b) Cf_nameinfo.addrinfo ->
    Cf_nameinfo.to_address_arg -> ('a, 'b) Cf_nameinfo.addrinfo list
  val to_all_addresses :
    Cf_nameinfo.to_address_arg -> (unit, unit) Cf_nameinfo.addrinfo list
end