TCP/TLS connection pooling for Eio
1(*---------------------------------------------------------------------------
2 Copyright (c) 2025 Anil Madhavapeddy <anil@recoil.org>. All rights reserved.
3 SPDX-License-Identifier: ISC
4 ---------------------------------------------------------------------------*)
5
6(** Internal connection representation - not exposed in public API *)
7
8let src =
9 Logs.Src.create "conpool.connection"
10 ~doc:"Connection pool internal connection management"
11
12module Log = (val Logs.src_log src : Logs.LOG)
13
14type t = {
15 flow : [Eio.Resource.close_ty | Eio.Flow.two_way_ty] Eio.Resource.t;
16 tls_flow : Tls_eio.t option;
17 created_at : float;
18 mutable last_used : float;
19 mutable use_count : int;
20 endpoint : Endpoint.t;
21 mutex : Eio.Mutex.t;
22}
23
24let flow t = t.flow
25let tls_flow t = t.tls_flow
26let endpoint t = t.endpoint
27let created_at t = t.created_at
28let last_used t = t.last_used
29let use_count t = t.use_count
30
31let update_usage t ~now =
32 Eio.Mutex.use_rw ~protect:true t.mutex (fun () ->
33 t.last_used <- now;
34 t.use_count <- t.use_count + 1)
35
36let pp ppf t =
37 let uses = t.use_count in
38 Fmt.pf ppf "Connection(endpoint=%a, created_at=%.2f, uses=%d)" Endpoint.pp
39 t.endpoint t.created_at uses