TCP/TLS connection pooling for Eio
at main 39 lines 1.2 kB view raw
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