Buffering tweaks

We (can) set various server-side socket options that affect buffering. The values are stored in C structures without real Lua bindings, so setting them is a bit long.

(require 'ffi').C.the_worker.engine.net.tcp.user_timeout

On TCP-based server-side sockets we set TCP_USER_TIMEOUT option if available (~Linux). We use default 1000, i.e. one second. For details see the definition in man tcp.7.

(require 'ffi').C.the_worker.engine.net.listen_tcp_buflens.snd
(require 'ffi').C.the_worker.engine.net.listen_tcp_buflens.rcv
(require 'ffi').C.the_worker.engine.net.listen_udp_buflens.snd
(require 'ffi').C.the_worker.engine.net.listen_udp_buflens.rcv

If overridden to nonzero, these variables instruct the OS to modify kernel-space buffers for server-side sockets. We split the setting for UDP vs. TCP and sending vs. receiving.

For details see SO_SNDBUF and SO_RCVBUF in man socket.7. There is no user-space buffering beyond immediate manipulation, only the OS keeps some.