fix socket-after-close panic in consumer drop path
ReleaseSafe caught an unreachable panic in posix.setsockopt when a
ConsumerTooSlow kick raced with the websocket server's readLoop thread.
the race: dropSlowConsumer called conn.close() from the broadcast thread
while readLoop (server thread) was about to call setsockopt on the same
socket fd. setsockopt got EBADF, zig stdlib hit unreachable → panic.
under ReleaseFast this was silent undefined behavior — likely existed on
every prior build.
fix: move conn.close() from dropSlowConsumer (broadcast thread) to the
end of writeLoop (consumer's own thread). writeLoop exits when alive is
set to false, drains remaining frames, then closes the connection. this
unblocks readLoop's pending read without racing on socket state.
also bump BUFFER_CAP 8192 → 65536 to reduce ConsumerTooSlow frequency
(cherry-pick of the ee4e368 change onto the current tree).
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>