Thank you this was my issue, connect
was to be used here and not bind
!!
My original example could be fixed by simply replacing bind
with connect
:
(* Socket Creation *)
let socket = Unix.socket PF_INET SOCKET_DGRAM 0 in
Unix.setsockopt socket SO_REUSEADDR true;
(* Address Resolution *)
let host_entry = Unix.gethostbyname name in
let entry = Array.get host_entry.h_addr_list 0 in
let addr = Unix.ADDR_INET (entry, port) in
(* Bind socket and address *)
Unix.connect socket addr;
(* Now we can send/recv data *)
The eio
example can fixed as follows:
Eio.Switch.run @@ fun sw ->
let net = Eio.Stdenv.net env in
let addr = Eio.Net.getaddrinfo_datagram ~service:port net host |> List.hd in
let sock = Eio.Net.datagram_socket ~sw net `UdpV4 in
(* Now send/recv data using addr *)
Eio.Net.send ~dst:addr sock [data_buffer]