• src/doors/syncduke/syncduke_log.csrc/doors/syncduke/CMakeLists.txt syn

    From Rob Swindell (on Windows 11)@VERT to Git commit to main/sbbs/master on Sat Jun 27 03:03:33 2026
    https://gitlab.synchro.net/main/sbbs/-/commit/20ddeb0b1d9ad114fa1b4131
    Added Files:
    src/doors/syncduke/syncduke_log.c
    Modified Files:
    src/doors/syncduke/CMakeLists.txt syncduke.h syncduke_config.c syncduke_door.c syncduke_input.c syncduke_io.c src/doors/syncduke/tests/test_keymap.c
    Log Message:
    syncduke: debug log, crash handler, and resilient door I/O

    Add an optional file debug log (syncduke_log.c), independent of the BBS's stderr/syslog capture -- a door that drops back to the BBS otherwise leaves nothing logged, and WER minidumps aren't configured on this host:
    - enabled via syncduke.ini [debug] log, env SYNCDUKE_LOG, or -log <path>; a
    relative path lands in each player's per-user dir. Timestamped, flushed
    per line so a crash/hangup still leaves the tail on disk.
    - installs a last-resort crash handler (SetUnhandledExceptionFilter on
    Windows, SIGSEGV/etc on *nix) that records the fault to the log, plus an
    atexit marker -- so hangups, clean exits, and crashes are all captured.
    - hangup() and the send/recv error paths log the reason incl. WSA codes.

    Make transient socket errors non-fatal: send()/recv() returning WSAENOBUFS
    or WSAEINTR are backpressure (retry next tick), not a dead client. A burst
    of large frames (e.g. holding a key, which defeats the frame de-dupe) can surface WSAENOBUFS, which previously dropped the player back to the BBS.

    Also: clamp the mouse-sensitivity slider floor to 1 (0 = no turn at all),
    and wire the git build-info (synchronet_gitinfo) + the syncduke_record_enabled / [game] record plumbing used by the menu and demo changes that follow.

    Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
    ---
    þ Synchronet þ Vertrauen þ Home of Synchronet þ [vert/cvs/bbs].synchro.net