__                 _ _                _
  / _| ___   ___   __| | |__   __ _ _ __| | __
 | |_ / _ \ / _ \ / _` | '_ \ / _` | '__| |/ /
 |  _| (_) | (_) | (_| | |_) | (_| | |  |   <
 |_|  \___/ \___/ \__,_|_.__/ \__,_|_|  |_|\_\

A personal BBS  ·  Missoula, Montana  ·  formerly NaClCON BBS

Connect from your terminal: telnet naclconbbs.net 23  |  ssh naclconbbs.net -p 2222

  • 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