https://gitlab.synchro.net/main/sbbs/-/commit/d6dc31c7e5e083e7e254c97c
Modified Files:
src/syncterm/rlogin.c
Log Message:
SyncTERM: rlogin OOB via exceptfds + MSG_OOB
Winsock2's SO_OOBINLINE + SIOCATMARK combo doesn't reliably surface
RFC 1282 urgent-mode control bytes, so rlogin's mode-switch / window-
size requests were dropped on Windows. Drop SO_OOBINLINE entirely and
detect urgent via select()'s exceptfds, consuming the byte from its
separate mailbox with recv(MSG_OOB) once SIOCATMARK shows the inline
stream has drained to the mark. Same code path on Windows and POSIX.
socket_check() is left untouched (many out-of-tree consumers); the
input thread now uses a bespoke inline select() that watches both
readfds and exceptfds. Once OOB is signaled exceptfds is dropped from
the wait set to avoid a busy-loop while we wait for the inline read
pointer to reach the urgent point — RFC 1282 mode-switch bytes
(0x10/0x20) apply to data following the urgent ptr, so pre-mark inline
data must drain in the old mode first.
Co-Authored-By: Claude Opus 4.7 (1M context) <
[email protected]>
--- SBBSecho 3.37-Linux
* Origin: Vertrauen - [vert/cvs/bbs].synchro.net (1:103/705)