Skip to content

Commit cb602ac

Browse files
committed
Move things to net and implement libuv
1 parent 6f94a9e commit cb602ac

File tree

5 files changed

+55
-36
lines changed

5 files changed

+55
-36
lines changed

lib_eio/net.ml

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -190,6 +190,23 @@ let connect ~sw (t:#t) = t#connect ~sw
190190

191191
let datagram_socket ~sw (t:#t) = t#datagram_socket ~sw
192192

193+
(* keep in sync with C stubs *)
194+
type getaddrinfo_error =
195+
| EAI_ADDRFAMILY
196+
| EAI_AGAIN
197+
| EAI_BADFLAGS
198+
| EAI_BADHINTS
199+
| EAI_FAIL
200+
| EAI_FAMILY
201+
| EAI_MEMORY
202+
| EAI_NODATA
203+
| EAI_NONAME
204+
| EAI_SERVICE
205+
| EAI_SOCKTYPE
206+
| EAI_SYSTEM
207+
208+
exception Getaddrinfo_error of getaddrinfo_error
209+
193210
let getaddrinfo ?(service="") (t:#t) hostname = t#getaddrinfo ~service hostname
194211

195212
let getaddrinfo_stream ?service t hostname =

lib_eio/net.mli

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -202,6 +202,23 @@ val recv : #datagram_socket -> Cstruct.t -> Sockaddr.datagram * int
202202

203203
(** {2 DNS queries} *)
204204

205+
(* keep in sync with C stubs *)
206+
type getaddrinfo_error =
207+
| EAI_ADDRFAMILY
208+
| EAI_AGAIN
209+
| EAI_BADFLAGS
210+
| EAI_BADHINTS
211+
| EAI_FAIL
212+
| EAI_FAMILY
213+
| EAI_MEMORY
214+
| EAI_NODATA
215+
| EAI_NONAME
216+
| EAI_SERVICE
217+
| EAI_SOCKTYPE
218+
| EAI_SYSTEM
219+
220+
exception Getaddrinfo_error of getaddrinfo_error
221+
205222
val getaddrinfo: ?service:string -> #t -> string -> Sockaddr.t list
206223
(** [getaddrinfo ?service t node] returns a list of IP addresses for [node]. [node] is either a domain name or
207224
an IP address.

lib_eio_linux/eio_linux.ml

Lines changed: 4 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -828,23 +828,8 @@ module Low_level = struct
828828

829829
external eio_getdents : Unix.file_descr -> string list = "caml_eio_getdents"
830830

831-
(* keep in sync with eio_stubs.c *)
832-
type gai_error =
833-
| EAI_ADDRFAMILY
834-
| EAI_AGAIN
835-
| EAI_BADFLAGS
836-
| EAI_BADHINTS
837-
| EAI_FAIL
838-
| EAI_FAMILY
839-
| EAI_MEMORY
840-
| EAI_NODATA
841-
| EAI_NONAME
842-
| EAI_SERVICE
843-
| EAI_SOCKTYPE
844-
| EAI_SYSTEM
845-
846831
external eio_getaddrinfo : string -> string -> Unix.getaddrinfo_option list ->
847-
(Unix.addr_info list, gai_error) result
832+
(Unix.addr_info list, Eio.Net.getaddrinfo_error) result
848833
= "caml_eio_getaddrinfo"
849834

850835
let getrandom { Cstruct.buffer; off; len } =
@@ -937,7 +922,9 @@ module Low_level = struct
937922
| _ -> None
938923
in
939924
Eio_unix.run_in_systhread @@ fun () ->
940-
Unix.getaddrinfo node service []
925+
(match (eio_getaddrinfo node service []) with
926+
| Ok l -> l
927+
| Error e -> raise (Eio.Net.Getaddrinfo_error e))
941928
|> List.filter_map to_eio_sockaddr_t
942929
end
943930

lib_eio_linux/eio_linux.mli

Lines changed: 2 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -254,21 +254,8 @@ module Low_level : sig
254254
(** [getaddrinfo host] returns a list of IP addresses for [host]. [host] is either a domain name or
255255
an ipaddress. *)
256256

257-
type gai_error =
258-
| EAI_ADDRFAMILY
259-
| EAI_AGAIN
260-
| EAI_BADFLAGS
261-
| EAI_BADHINTS
262-
| EAI_FAIL
263-
| EAI_FAMILY
264-
| EAI_MEMORY
265-
| EAI_NODATA
266-
| EAI_NONAME
267-
| EAI_SERVICE
268-
| EAI_SOCKTYPE
269-
| EAI_SYSTEM
270-
271-
val eio_getaddrinfo : string -> string -> Unix.getaddrinfo_option list -> (Unix.addr_info list, gai_error) result
257+
val eio_getaddrinfo : string -> string -> Unix.getaddrinfo_option list ->
258+
(Unix.addr_info list, Eio.Net.getaddrinfo_error) result
272259

273260

274261
end

lib_eio_luv/eio_luv.ml

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -575,14 +575,25 @@ module Low_level = struct
575575
| _ -> None
576576
in
577577
let request = Luv.DNS.Addr_info.Request.make () in
578+
let r e = raise (Eio.Net.Getaddrinfo_error e) in
578579
match (await_with_cancel ~request
579580
(fun loop -> Luv.DNS.getaddrinfo ~loop ~request ~service ~node ()))
580581
with
581582
| Ok nl -> List.filter_map to_eio_sockaddr_t nl
582-
| Error `EAI_ADDRFAMILY | Error `EAI_AGAIN | Error `EAI_BADFLAGS | Error `EAI_BADHINTS
583-
| Error `EAI_CANCELED | Error `EAI_FAIL | Error `EAI_FAMILY | Error `EAI_MEMORY
584-
| Error `EAI_NODATA | Error `EAI_NONAME| Error `EAI_OVERFLOW | Error `EAI_PROTOCOL
585-
| Error `EAI_SERVICE | Error `EAI_SOCKTYPE -> []
583+
| Error `EAI_ADDRFAMILY -> r EAI_ADDRFAMILY
584+
| Error `EAI_AGAIN -> r EAI_AGAIN
585+
| Error `EAI_BADFLAGS -> r EAI_BADFLAGS
586+
| Error `EAI_BADHINTS -> r EAI_BADHINTS
587+
| Error `EAI_CANCELED -> r EAI_FAIL (* note *)
588+
| Error `EAI_FAIL -> r EAI_FAIL
589+
| Error `EAI_FAMILY -> r EAI_FAMILY
590+
| Error `EAI_MEMORY -> r EAI_MEMORY
591+
| Error `EAI_NODATA -> r EAI_NODATA
592+
| Error `EAI_NONAME -> r EAI_NONAME
593+
| Error `EAI_OVERFLOW -> r EAI_FAIL (* note *)
594+
| Error `EAI_PROTOCOL -> r EAI_FAIL (* note *)
595+
| Error `EAI_SERVICE -> r EAI_SERVICE
596+
| Error `EAI_SOCKTYPE -> r EAI_SOCKTYPE
586597
| Error e -> raise (Luv_error e)
587598
end
588599

0 commit comments

Comments
 (0)