Skip to content

Commit 804a18b

Browse files
committed
add TCP_DEFER_ACCEPT and TCP_NO_DELAY socket options
1 parent 92a06fe commit 804a18b

File tree

3 files changed

+21
-1
lines changed

3 files changed

+21
-1
lines changed

lib_eio/unix/net.ml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,8 @@ type socket_int_option =
5353
| EIO_TCP_KEEPCNT
5454
| EIO_TCP_KEEPIDLE
5555
| EIO_TCP_KEEPINTVL
56+
| EIO_TCP_DEFER_ACCEPT
57+
| EIO_TCP_NODELAY
5658

5759
external setsockopt_int : Unix.file_descr -> socket_int_option -> int -> unit =
5860
"eio_unix_setsockopt_int"
@@ -64,10 +66,12 @@ module Sockopt = struct
6466
| SO_KEEPALIVE : bool Eio.Net.Sockopt.t
6567
| SO_REUSEADDR : bool Eio.Net.Sockopt.t
6668
| SO_REUSEPORT : bool Eio.Net.Sockopt.t
69+
| TCP_NODELAY : bool Eio.Net.Sockopt.t
6770
| TCP_CORK : int Eio.Net.Sockopt.t
6871
| TCP_KEEPCNT : int Eio.Net.Sockopt.t
6972
| TCP_KEEPIDLE : int Eio.Net.Sockopt.t
7073
| TCP_KEEPINTVL : int Eio.Net.Sockopt.t
74+
| TCP_DEFER_ACCEPT : int Eio.Net.Sockopt.t
7175

7276
let set : type a . Fd.t -> a Eio.Net.Sockopt.t -> a -> unit = fun sock k v ->
7377
Fd.use_exn "Sockopt.set" sock @@ fun fd ->
@@ -76,6 +80,8 @@ module Sockopt = struct
7680
| TCP_KEEPCNT -> setsockopt_int fd EIO_TCP_KEEPCNT v
7781
| TCP_KEEPIDLE -> setsockopt_int fd EIO_TCP_KEEPIDLE v
7882
| TCP_KEEPINTVL -> setsockopt_int fd EIO_TCP_KEEPINTVL v
83+
| TCP_DEFER_ACCEPT -> setsockopt_int fd EIO_TCP_DEFER_ACCEPT v
84+
| TCP_NODELAY -> setsockopt_int fd EIO_TCP_DEFER_ACCEPT (if v then 1 else 0)
7985
| SO_KEEPALIVE -> Unix.(setsockopt fd SO_KEEPALIVE v)
8086
| SO_REUSEADDR -> Unix.(setsockopt fd SO_REUSEADDR v)
8187
| SO_REUSEPORT -> Unix.(setsockopt fd SO_REUSEPORT v)
@@ -87,6 +93,8 @@ module Sockopt = struct
8793
| TCP_KEEPCNT -> getsockopt_int fd EIO_TCP_KEEPCNT
8894
| TCP_KEEPIDLE -> getsockopt_int fd EIO_TCP_KEEPIDLE
8995
| TCP_KEEPINTVL -> getsockopt_int fd EIO_TCP_KEEPINTVL
96+
| TCP_DEFER_ACCEPT -> getsockopt_int fd EIO_TCP_DEFER_ACCEPT
97+
| TCP_NODELAY -> getsockopt_int fd EIO_TCP_NODELAY = 1
9098
| SO_KEEPALIVE -> Unix.(getsockopt fd SO_KEEPALIVE)
9199
| SO_REUSEADDR -> Unix.(getsockopt fd SO_REUSEADDR)
92100
| SO_REUSEPORT -> Unix.(getsockopt fd SO_REUSEPORT)

lib_eio/unix/net.mli

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,8 @@ module Sockopt : sig
8787
| TCP_KEEPCNT : int Eio.Net.Sockopt.t
8888
| TCP_KEEPIDLE : int Eio.Net.Sockopt.t
8989
| TCP_KEEPINTVL : int Eio.Net.Sockopt.t
90+
| TCP_DEFER_ACCEPT : int Eio.Net.Sockopt.t
91+
| TCP_NODELAY : bool Eio.Net.Sockopt.t
9092

9193
val set : Fd.t -> 'a Eio.Net.Sockopt.t -> 'a -> unit
9294
(** [set fd opt v] sets the [opt] option to value [v] on socket [fd]. *)

lib_eio/unix/sockopt.c

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,14 @@
2727
#define TCP_KEEPINTVL (-1)
2828
#endif
2929

30+
#ifndef TCP_DEFER_ACCEPT
31+
#define TCP_DEFER_ACCEPT (-1)
32+
#endif
33+
34+
#ifndef TCP_NODELAY
35+
#define TCP_NODELAY (-1)
36+
#endif
37+
3038
struct socket_option {
3139
int level;
3240
int option;
@@ -40,7 +48,9 @@ static struct socket_option sockopt_int[] = {
4048
{ IPPROTO_TCP, TCP_CORK },
4149
{ IPPROTO_TCP, TCP_KEEPCNT },
4250
{ IPPROTO_TCP, TCP_KEEPIDLE },
43-
{ IPPROTO_TCP, TCP_KEEPINTVL }
51+
{ IPPROTO_TCP, TCP_KEEPINTVL },
52+
{ IPPROTO_TCP, TCP_DEFER_ACCEPT },
53+
{ IPPROTO_TCP, TCP_NODELAY },
4454
};
4555

4656
CAMLprim value eio_unix_getsockopt_int(value vsocket, value voption)

0 commit comments

Comments
 (0)