A double-clicked server closed its window with the error still in it. It only
waits when it is alone on a visible console, so terminals, hosting panels and
hidden scheduled tasks still see it exit at once.
Control pipes driven by one-shot writers (echo cmd > fifo, fleet
tools) close the write end after each line; read()==0 then means
'no writers right now', not EOF. Only treat 0 as end-of-input for
non-FIFOs (/dev/null, files, terminals). Sleep briefly on empty
FIFO polls so POLLHUP does not spin.
- console reader: poll()+read() instead of iostream getline; joinable
thread joined before Steam shutdown/exit (iostream lock deadlock
needed Ctrl+D before)
- README: Linux dedicated-server setup guide
- CI: version input, tag builds, ReSkateServer-Linux-<version> asset
with setup script staged at top level