package vcaml

  1. Overview
  2. Docs

Source file msgpack_unix.ml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
open Async
open Core

module Unix_socket : sig
  include Msgpack_rpc.Connection

  val with_socket_file
    :  string
    -> ((t -> 'a Deferred.t) -> 'a Deferred.t) Tcp.with_connect_options

  val open_from_filename : string -> t Deferred.t
end = struct
  type t =
    { reader : Reader.t
    ; writer : Writer.t
    }
  [@@deriving fields]

  let with_socket_file
        fname
        ?buffer_age_limit
        ?interrupt
        ?reader_buffer_size
        ?writer_buffer_size
        ?timeout
        f
    =
    let addr = Tcp.Where_to_connect.of_file fname in
    Tcp.with_connection
      addr
      ?buffer_age_limit
      ?interrupt
      ?reader_buffer_size
      ?writer_buffer_size
      ?timeout
      (fun _ reader writer -> f { reader; writer })
  ;;

  let open_from_filename fname =
    let addr = Tcp.Where_to_connect.of_file fname in
    let%map _sock, reader, writer = Tcp.connect addr in
    { reader; writer }
  ;;
end

module M = Msgpack_rpc.Make (Unix_socket) ()
include M
OCaml

Innovation. Community. Security.