From 0dde5a0f3d3bb221b4b0b2d82750955009e45783 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Loi=CC=88c=20Correnson?= <loic.correnson@cea.fr>
Date: Tue, 29 Mar 2022 10:14:00 +0200
Subject: [PATCH] [server] force flushing of in & out socket buffers

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

diff --git a/src/plugins/server/server_socket.ml b/src/plugins/server/server_socket.ml
index 32c00fa522e..9162d01da30 100644
--- a/src/plugins/server/server_socket.ml
+++ b/src/plugins/server/server_socket.ml
@@ -59,11 +59,15 @@ type channel = {
 
 let feed_bytes { sock ; rcv ; brcv } =
   try
-    (* rcv buffer is only used locally *)
-    let s = Bytes.length rcv in
-    let n = Unix.read sock rcv 0 s in
-    Buffer.add_subbytes brcv rcv 0 n ;
-  with Unix.Unix_error((EAGAIN|EWOULDBLOCK),_,_) -> ()
+    while true do
+      (* rcv buffer is only used locally *)
+      let s = Bytes.length rcv in
+      let n = Unix.read sock rcv 0 s in
+      if n > 0 then
+        Buffer.add_subbytes brcv rcv 0 n
+      else raise Exit
+    done
+  with Exit | Unix.Unix_error((EAGAIN|EWOULDBLOCK),_,_) -> ()
 
 let send_bytes { sock ; snd ; bsnd } =
   try
@@ -200,7 +204,7 @@ let commands ch =
   begin
     feed_bytes ch ;
     match parse ch with
-    | [] -> None
+    | [] -> send_bytes ch ; None
     | requests -> Some Main.{ requests ; callback = callback ch }
   end
 
-- 
GitLab