diff --git a/src/plugins/server/server_socket.ml b/src/plugins/server/server_socket.ml index 1ad5262cceac886fa099f70b2d203ecf94fc9ab1..b0f2e5b03fa47ea1dbd7bad43e8a5b960e564a90 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 ;