functor (AsyncTimer : Rmcast_types.AsynchronousTimerSig->
  functor (FlowControlStatus : Rmcast_types.FlowControlStatusSig->
    functor (BandwidthEstimator : Rmcast_types.BandwidthEstimatorSig->
      functor
        (Transmiter : sig
                        type dsc
                        type be_dsc = BandwidthEstimator.dsc
                        type fc_dsc = FlowControlStatus.dsc
                        exception Write_would_block of dsc *
                                    Rmcast_types.rm_msg_t * Iovec.t
                        val create :
                          Unix.file_descr ->
                          Unix.sockaddr ->
                          Common_types.proc_info ->
                          be_dsc ref -> be_dsc ref -> fc_dsc -> dsc
                        val set_callback :
                          dsc ->
                          (Common_types.proc_info ->
                           Rmcast_types.rm_msg_t -> int -> unit) ->
                          unit
                        val set_blocking_write_alert :
                          dsc -> (Unix.file_descr -> bool -> unit) -> unit
                        val add_headers :
                          dsc ->
                          Rmcast_types.rm_msg_t ->
                          (Rmcast_types.rm_msg_t -> Rmcast_types.rm_msg_t) ->
                          Common_types.iovec ->
                          Rmcast_types.rm_msg_t * Common_types.iovec
                        val get_outgoing_bandwidth_info :
                          dsc -> be_dsc * be_dsc * fc_dsc
                        val transmit_msg :
                          dsc ->
                          Rmcast_types.rm_msg_t ->
                          Common_types.iovec -> Common_types.iovec
                      end->
        sig
          type dsc
          type tdsc = Transmiter.dsc
          val create_dsc : tdsc -> dsc
          val submit_msg :
            dsc ->
            tdsc *
            (Rmcast_types.rm_msg_t *
             (Rmcast_types.rm_msg_t -> Rmcast_types.rm_msg_t) *
             Common_types.iovec) *
            (unit -> unit) * bool -> unit
          val reopen : dsc -> unit
          val run : unit -> unit
        end