fix WebSocket deadlock on slow client + mobile TX controls visibility

Deadlock: BroadcastBinary held FClientLock during blocking SockSend;
slow/stalled client caused Stop() to wait forever. Fix: set SO_SNDTIMEO=1s
on each accepted socket so SockSend returns error instead of hanging,
mark client wsClosed on send failure so subsequent ticks skip it.

Mobile: move TONE/TX-slider/MOX to front of toolbar via CSS order so
they are immediately visible without horizontal scroll on phones.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-05-09 16:39:43 +03:00
co-authored by Claude Sonnet 4.6
parent 9662d3d090
commit 3d25f837af
4 changed files with 65 additions and 2 deletions
+3
View File
@@ -145,6 +145,9 @@ begin
P := @Data;
Result := SendRaw(P^, Len);
end;
// Ошибка отправки (таймаут SO_SNDTIMEO, разрыв) — немедленно закрываем
// клиент чтобы BroadcastBinary не держал FClientLock на следующих тиках.
if not Result then FState := wsClosed;
finally
FLock.Leave;
end;