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 created_at : float;
17 mutable last_used : float;
18 mutable use_count : int;
19 endpoint : Endpoint.t;
20 mutex : Eio.Mutex.t;
21}
22
23let flow t = t.flow
24let endpoint t = t.endpoint
25let created_at t = t.created_at
26let last_used t = t.last_used
27let use_count t = t.use_count
28
29let update_usage t ~now =
30 Eio.Mutex.use_rw ~protect:true t.mutex (fun () ->
31 t.last_used <- now;
32 t.use_count <- t.use_count + 1)
33
34let pp ppf t =
35 let uses = t.use_count in
36 Fmt.pf ppf "Connection(endpoint=%a, created_at=%.2f, uses=%d)" Endpoint.pp
37 t.endpoint t.created_at uses