From eb13f16973bf3c49c8f2248903982557a019cbce Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Loi=CC=88c=20Correnson?= <loic.correnson@cea.fr>
Date: Wed, 30 Mar 2022 19:07:57 +0200
Subject: [PATCH] [server] fixed socket server default size

---
 src/plugins/server/server_socket.ml | 24 ++++++++++++++++++------
 1 file changed, 18 insertions(+), 6 deletions(-)

diff --git a/src/plugins/server/server_socket.ml b/src/plugins/server/server_socket.ml
index 1ad5262ccea..b0f2e5b03fa 100644
--- a/src/plugins/server/server_socket.ml
+++ b/src/plugins/server/server_socket.ml
@@ -46,8 +46,8 @@ module SocketSize = Senv.Int
     (struct
       let option_name = "-server-socket-size"
       let arg_name = "n"
-      let default = 65536
-      let help = "Set the maximal size of socket buffers (default: 65536)"
+      let default = 256
+      let help = "Control the size of socket buffers (in ko, default 256)."
     end)
 
 let _ = Server_doc.protocole
@@ -238,6 +238,17 @@ let close (s: socket) =
     s.channel <- None ;
     Unix.close ch.sock
 
+let set_socket_size sock opt s =
+  begin
+    let nbytes = s * 1024 in
+    (try Unix.setsockopt_int sock opt nbytes
+     with Unix.Unix_error(err,_,_) ->
+       let msg = Unix.error_message err in
+       Senv.warning ~once:true
+         "Invalid socket size (%d: %s)" nbytes msg) ;
+    Unix.getsockopt_int sock opt
+  end
+
 let channel (s: socket) =
   match s.channel with
   | Some _ as chan -> chan
@@ -245,10 +256,11 @@ let channel (s: socket) =
     try
       let sock,_ = Unix.accept ~cloexec:true s.socket in
       Unix.set_nonblock sock ;
-      let size = max 256 (SocketSize.get ()) in
-      let rcv = min size @@ Unix.getsockopt_int sock SO_RCVBUF in
-      let snd = min size @@ Unix.getsockopt_int sock SO_SNDBUF in
-      Senv.debug "Client connected (in: %d) (out: %d)" rcv snd ;
+      let size = SocketSize.get () in
+      let rcv = set_socket_size sock SO_RCVBUF size in
+      let snd = set_socket_size sock SO_SNDBUF size in
+      Senv.debug ~level:2 "Socket size in:%d out:%d@." rcv snd ;
+      Senv.debug "Client connected" ;
       let ch = Some {
           sock ;
           snd = Bytes.create snd ;
-- 
GitLab