Skip to content

Commit

Permalink
Add API to connect using posix sockets.
Browse files Browse the repository at this point in the history
  • Loading branch information
toots committed Jan 15, 2025
1 parent 7a73062 commit 4eec37e
Show file tree
Hide file tree
Showing 5 changed files with 32 additions and 9 deletions.
1 change: 1 addition & 0 deletions CHANGES.md
Original file line number Diff line number Diff line change
Expand Up @@ -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)
=====
Expand Down
2 changes: 1 addition & 1 deletion dune-project
Original file line number Diff line number Diff line change
Expand Up @@ -27,5 +27,5 @@
(ctypes (>= 0.21.1))
(ctypes-foreign (>= 0.21.1))
integers
posix-socket)
(posix-socket (>= 2.0.3)))
)
27 changes: 20 additions & 7 deletions src/srt.ml
Original file line number Diff line number Diff line change
Expand Up @@ -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 =
Expand Down
9 changes: 9 additions & 0 deletions src/srt.mli
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion srt.opam
Original file line number Diff line number Diff line change
Expand Up @@ -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: [
Expand Down

0 comments on commit 4eec37e

Please sign in to comment.