TCP/TLS connection pooling for Eio
at main 1.1 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 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