Skip to content

Commit b419150

Browse files
committed
Move things to net and implement libuv
1 parent a26ddac commit b419150

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
@@ -198,6 +198,23 @@ let datagram_socket ?(reuse_addr=false) ?(reuse_port=false) ~sw (t:#t) addr =
198198
let addr = (addr :> [Sockaddr.datagram | `UdpV4 | `UdpV6]) in
199199
t#datagram_socket ~reuse_addr ~reuse_port ~sw addr
200200

201+
(* keep in sync with C stubs *)
202+
type getaddrinfo_error =
203+
| EAI_ADDRFAMILY
204+
| EAI_AGAIN
205+
| EAI_BADFLAGS
206+
| EAI_BADHINTS
207+
| EAI_FAIL
208+
| EAI_FAMILY
209+
| EAI_MEMORY
210+
| EAI_NODATA
211+
| EAI_NONAME
212+
| EAI_SERVICE
213+
| EAI_SOCKTYPE
214+
| EAI_SYSTEM
215+
216+
exception Getaddrinfo_error of getaddrinfo_error
217+
201218
let getaddrinfo ?(service="") (t:#t) hostname = t#getaddrinfo ~service hostname
202219

203220
let getaddrinfo_stream ?service t hostname =

lib_eio/net.mli

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

223223
(** {2 DNS queries} *)
224224

225+
(* keep in sync with C stubs *)
226+
type getaddrinfo_error =
227+
| EAI_ADDRFAMILY
228+
| EAI_AGAIN
229+
| EAI_BADFLAGS
230+
| EAI_BADHINTS
231+
| EAI_FAIL
232+
| EAI_FAMILY
233+
| EAI_MEMORY
234+
| EAI_NODATA
235+
| EAI_NONAME
236+
| EAI_SERVICE
237+
| EAI_SOCKTYPE
238+
| EAI_SYSTEM
239+
240+
exception Getaddrinfo_error of getaddrinfo_error
241+
225242
val getaddrinfo: ?service:string -> #t -> string -> Sockaddr.t list
226243
(** [getaddrinfo ?service t node] returns a list of IP addresses for [node]. [node] is either a domain name or
227244
an IP address.

lib_eio_linux/eio_linux.ml

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

859859
external eio_getdents : Unix.file_descr -> string list = "caml_eio_getdents"
860860

861-
(* keep in sync with eio_stubs.c *)
862-
type gai_error =
863-
| EAI_ADDRFAMILY
864-
| EAI_AGAIN
865-
| EAI_BADFLAGS
866-
| EAI_BADHINTS
867-
| EAI_FAIL
868-
| EAI_FAMILY
869-
| EAI_MEMORY
870-
| EAI_NODATA
871-
| EAI_NONAME
872-
| EAI_SERVICE
873-
| EAI_SOCKTYPE
874-
| EAI_SYSTEM
875-
876861
external eio_getaddrinfo : string -> string -> Unix.getaddrinfo_option list ->
877-
(Unix.addr_info list, gai_error) result
862+
(Unix.addr_info list, Eio.Net.getaddrinfo_error) result
878863
= "caml_eio_getaddrinfo"
879864

880865
let getrandom { Cstruct.buffer; off; len } =
@@ -973,7 +958,9 @@ module Low_level = struct
973958
| _ -> None
974959
in
975960
Eio_unix.run_in_systhread @@ fun () ->
976-
Unix.getaddrinfo node service []
961+
(match (eio_getaddrinfo node service []) with
962+
| Ok l -> l
963+
| Error e -> raise (Eio.Net.Getaddrinfo_error e))
977964
|> List.filter_map to_eio_sockaddr_t
978965
end
979966

lib_eio_linux/eio_linux.mli

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

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

270257

271258
end

lib_eio_luv/eio_luv.ml

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -654,14 +654,25 @@ module Low_level = struct
654654
| _ -> None
655655
in
656656
let request = Luv.DNS.Addr_info.Request.make () in
657+
let r e = raise (Eio.Net.Getaddrinfo_error e) in
657658
match (await_with_cancel ~request
658659
(fun loop -> Luv.DNS.getaddrinfo ~loop ~request ~service ~node ()))
659660
with
660661
| Ok nl -> List.filter_map to_eio_sockaddr_t nl
661-
| Error `EAI_ADDRFAMILY | Error `EAI_AGAIN | Error `EAI_BADFLAGS | Error `EAI_BADHINTS
662-
| Error `EAI_CANCELED | Error `EAI_FAIL | Error `EAI_FAMILY | Error `EAI_MEMORY
663-
| Error `EAI_NODATA | Error `EAI_NONAME| Error `EAI_OVERFLOW | Error `EAI_PROTOCOL
664-
| Error `EAI_SERVICE | Error `EAI_SOCKTYPE -> []
662+
| Error `EAI_ADDRFAMILY -> r EAI_ADDRFAMILY
663+
| Error `EAI_AGAIN -> r EAI_AGAIN
664+
| Error `EAI_BADFLAGS -> r EAI_BADFLAGS
665+
| Error `EAI_BADHINTS -> r EAI_BADHINTS
666+
| Error `EAI_CANCELED -> r EAI_FAIL (* note *)
667+
| Error `EAI_FAIL -> r EAI_FAIL
668+
| Error `EAI_FAMILY -> r EAI_FAMILY
669+
| Error `EAI_MEMORY -> r EAI_MEMORY
670+
| Error `EAI_NODATA -> r EAI_NODATA
671+
| Error `EAI_NONAME -> r EAI_NONAME
672+
| Error `EAI_OVERFLOW -> r EAI_FAIL (* note *)
673+
| Error `EAI_PROTOCOL -> r EAI_FAIL (* note *)
674+
| Error `EAI_SERVICE -> r EAI_SERVICE
675+
| Error `EAI_SOCKTYPE -> r EAI_SOCKTYPE
665676
| Error e -> raise (Luv_error e)
666677
end
667678

0 commit comments

Comments
 (0)