sig
  type mt
  type curlPipelining = PIPE_NOTHING | PIPE_HTTP1 | PIPE_MULTIPLEX
  type curlMultiOption =
      CURLMOPT_PIPELINING of Curl.Multi.curlPipelining list
    | CURLMOPT_MAXCONNECTS of int
    | CURLMOPT_MAX_PIPELINE_LENGTH of int
    | CURLMOPT_MAX_HOST_CONNECTIONS of int
  exception Error of string
  val create : unit -> Curl.Multi.mt
  val add : Curl.Multi.mt -> Curl.t -> unit
  val remove : Curl.Multi.mt -> Curl.t -> unit
  val perform : Curl.Multi.mt -> int
  val wait : ?timeout_ms:int -> Curl.Multi.mt -> bool
  val remove_finished : Curl.Multi.mt -> (Curl.t * Curl.curlCode) option
  val cleanup : Curl.Multi.mt -> unit
  type poll = POLL_NONE | POLL_IN | POLL_OUT | POLL_INOUT | POLL_REMOVE
  type fd_status = EV_AUTO | EV_IN | EV_OUT | EV_INOUT
  val set_socket_function :
    Curl.Multi.mt -> (Unix.file_descr -> Curl.Multi.poll -> unit) -> unit
  val set_timer_function : Curl.Multi.mt -> (int -> unit) -> unit
  val action_all : Curl.Multi.mt -> int
  val action_timeout : Curl.Multi.mt -> unit
  val action :
    Curl.Multi.mt -> Unix.file_descr -> Curl.Multi.fd_status -> int
  external timeout : Curl.Multi.mt -> int = "caml_curl_multi_timeout"
  val setopt : Curl.Multi.mt -> Curl.Multi.curlMultiOption -> unit
end