package async_ssl

  1. Overview
  2. Docs

Prefer calling with_connection. This is provided for completeness and backwards compatibility. You must handle closing the Reader.t and Writer.t returned by connect yourself.

val wrap_client_connection_and_stay_open : Config.Client.t -> Async.Reader.t -> Async.Writer.t -> f: (Connection.t -> Async.Reader.t -> Async.Writer.t -> ('res * [ `Do_not_close_until of unit Async.Deferred.t ]) Async.Deferred.t) -> ('res * [ `Connection_closed of unit Async.Deferred.t ]) Async.Deferred.t

wrap_client_connection will immediately tear down the connection as soon as f returns. This doesn't accommodate cases where 'res contains more Async primitives, such as a Pipe.Reader.t. wrap_client_connection_and_stay_open gives callers the agency to control when this teardown occurs.

Callers must ensure that `Do_not_close_until becomes determined to avoid leaking file descriptors. The unit Deferred.t returned in `Do_not_close_until is also returned in `Connection_closed in case functions external to wrap_client_connection_and_stay_open care whether the TLS session has been torn down.

It is an error to access the Reader.t/Writer.t once `Do_not_close_until has become determined (doing so may result in weird IO errors).