with_conn opens a connection to the TCP service on hostport and
if successful calls f with In_channel.t and Out_channel.t as arguments.
The return value of f will be returned by with_conn.
with_conn raises Connect_timeout if the connection attempt times out.
Unix_error will be raised if there are any other connect errors.
Any exceptions raised by f will be re-raised, which may include
Unix_errors raised by underlying channel read/write calls.
The In_channel.t, Out_channel.t, and underlying socket
will be closed by with_conn before it returns.
val with_connection : ?timeout:Core.Time.Span.t ‑> host:string ‑> port:int ‑> f:(Core.In_channel.t ‑> Core.Out_channel.t ‑> 'a) ‑> unit ‑> 'a