GameCult.Networking: answer an undecodable RUDP frame message_invalid and end the session at 8 in a row #46
Loading…
Reference in a new issue
No description provided.
Delete branch "libby/cs-refused-frames-cap"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Heimdall's parity ruling (2026-11-08), C# side; Rust #43 (
4828c416), TS #44, Python #45. C# is the odd one out:RudpCultNetSchemaServerended the session on the first undecodable frame. It now answersmessage_invalid(details.field = "message") and keeps the session;RudpCultNetSchemaServer.MaxConsecutiveRefusedFrames = 8consecutive undecodable frames end it after the 8th is answered. Any decoded frame resets the run. Handler faults still end the session at once (unchanged).No write-authority decision is touched: the change is in the transport dispatch, below the database server. Not done here: the refused-delete half of the ruling.
CultNetDatabaseServer.HandleDeleteAsyncanswerswrite_not_authorizedinside the handler, where the dispatcher cannot count it or end a session; that needs a handler-to-dispatch signal (follow-up filed).Tests: three changed (a bad frame is now answered and kept; a frame queued behind it is handled; the poll-input class doc) and
EightConsecutiveUndecodableFramesEndTheSessionAfterTheEighthIsAnswered(cap pinned at 8, 6 more answered, a valid frame resets, 7 more answered, 8th answered then ended). Four hand mutants fail it (cap 7, cap 9, run never resets, run never counts). Mutants ran underprlimit --cpu=500andDOTNET_GCHeapHardLimit=4GiB;prlimit --aswas not used because the .NET runtime reserves far more address space than it uses. GameCult.Networking.Tests 505 pass, GameCult.Mesh.Tests 342 pass.🤖 Generated with Claude Code