diff --git a/CHANGES.md b/CHANGES.md index 1a49116..b0f7f1d 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -3,6 +3,7 @@ * cross-compilation: use `wine` CLI when `wine64` is not available. * Add support for `ipv6only` socket option. +* Add API to use posix sockets for connecting. 0.3.1 (2024-10-29) ===== diff --git a/dune-project b/dune-project index 4137b93..85b61c2 100644 --- a/dune-project +++ b/dune-project @@ -27,5 +27,5 @@ (ctypes (>= 0.21.1)) (ctypes-foreign (>= 0.21.1)) integers - posix-socket) + (posix-socket (>= 2.0.3))) ) diff --git a/src/srt.ml b/src/srt.ml index 3a79a82..7861161 100644 --- a/src/srt.ml +++ b/src/srt.ml @@ -160,30 +160,43 @@ let transtype_of_int = function open Ctypes -let apply_sockaddr fn sockaddr = - let sockaddr = from_unix_sockaddr sockaddr in - let len = sizeof sockaddr_in_t in - fn sockaddr len +let apply_sockaddr fn sockaddr = fn sockaddr (sockaddr_len sockaddr) -let bind socket socketaddr = +let bind_posix_socket socket socketaddr = ignore (check_err (apply_sockaddr (bind socket) socketaddr)) -let connect socket socketaddr = +let bind socket socketaddr = + ignore + (check_err (apply_sockaddr (bind socket) (from_unix_sockaddr socketaddr))) + +let connect_posix_socket socket socketaddr = ignore (check_err (apply_sockaddr (connect socket) socketaddr)) +let connect socket socketaddr = + ignore + (check_err + (apply_sockaddr (connect socket) (from_unix_sockaddr socketaddr))) + let accept socket = let sockaddr = allocate_n sockaddr_t ~count:(sizeof sockaddr_storage_t) in let socklen = allocate int (sizeof sockaddr_t) in let socket = check_err (accept socket sockaddr socklen) in (socket, to_unix_sockaddr sockaddr) -let rendez_vous socket sockaddr1 sockaddr2 = +let rendez_vous_posix_socket socket sockaddr1 sockaddr2 = ignore (check_err (apply_sockaddr (apply_sockaddr (rendez_vous socket) sockaddr1) sockaddr2)) +let rendez_vous socket sockaddr1 sockaddr2 = + ignore + (check_err + (apply_sockaddr + (apply_sockaddr (rendez_vous socket) (from_unix_sockaddr sockaddr1)) + (from_unix_sockaddr sockaddr2))) + type listen_callback = socket -> int -> Unix.sockaddr -> string option -> bool let listen_callback sock fn = diff --git a/src/srt.mli b/src/srt.mli index 18dde63..63e1f22 100644 --- a/src/srt.mli +++ b/src/srt.mli @@ -110,10 +110,19 @@ val cleanup : unit -> unit val create_socket : unit -> socket val getsockstate : socket -> socket_status val bind : socket -> Unix.sockaddr -> unit +val bind_posix_socket : socket -> Posix_socket.sockaddr Ctypes.ptr -> unit val listen_callback : socket -> listen_callback -> unit val listen : socket -> int -> unit val accept : socket -> socket * Unix.sockaddr val connect : socket -> Unix.sockaddr -> unit +val connect_posix_socket : socket -> Posix_socket.sockaddr Ctypes.ptr -> unit + +val rendez_vous_posix_socket : + socket -> + Posix_socket.sockaddr Ctypes.ptr -> + Posix_socket.sockaddr Ctypes.ptr -> + unit + val rendez_vous : socket -> Unix.sockaddr -> Unix.sockaddr -> unit val send : socket -> bytes -> int val recv : socket -> bytes -> int -> int diff --git a/srt.opam b/srt.opam index 53ed93c..70f6489 100644 --- a/srt.opam +++ b/srt.opam @@ -23,7 +23,7 @@ depends: [ "ctypes" {>= "0.21.1"} "ctypes-foreign" {>= "0.21.1"} "integers" - "posix-socket" + "posix-socket" {>= "2.0.3"} "odoc" {with-doc} ] build: [