feat(core): TCP in the simulation core
engine.ts ports Swift's "Java-compatible TCP sockets" in one piece, since half a state machine could not be checked: server and client sockets (a free port from Java's random numbers on their own seed), the three-way handshake with its result (connected, invalid socket, unreachable, timed out), segments of 1460 bytes, messages up to the push, a timeout of 3 × 2.5 s with at most three attempts, closing through every Java state including TIME_WAIT (2.5 s), sequence numbers modulo 2^32. Three scenarios match the Swift engine trace for trace: a LAN with data over three segments, closing from both ends, a closed port and an unreachable host; two networks through a router with a firewall rule, data lost until the connection closes, and an accepted socket that does not hold the port of its closed listener; CLOSING, reached by a lost FIN. The engine delivers a FIN within the same close, so both ends close at once only with packet loss; an empty message does not arrive in Swift (it does not advance the sequence number), nor here. Swift's four TCP engine tests are ported, with tests for stopping, a foreign SYN+ACK at a listener and the flag names. 17 mutation probes, 16 caught; the other (delivered, not waited, not connected gives unreachable) cannot be reached through Swift's engine, which never sends a reset and always acknowledges correctly. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -21,8 +21,12 @@ npm test # vergleicht mit den geschriebenen *.swift.json
|
||||
`sat`, `speed`; UDP (seit F2): `bindUdp` (Knoten, optional Port, lokale
|
||||
Adresse, Gegenstelle; Ergebnis die Socket-ID), `sendUdp` (Socket, Text,
|
||||
optional Ziel und Port), `receiveUdp` (Socket, optional Wartezeit),
|
||||
`closeSocket`. Das Ergebnis enthält die Sockets mit der Länge ihrer
|
||||
Warteschlange.
|
||||
`closeSocket`; TCP: `openTcpServer`, `openTcpClient`, `connectTcp`
|
||||
(Ergebnis `connected`, `invalidSocket`, `unreachable`, `timedOut`),
|
||||
`sendTcp` (mit `repeatCount` für lange Nachrichten), `receiveTcp`,
|
||||
`acceptedTcp`, `peerTcp`, `cleanTcp`; `closeSocket` schließt auch TCP.
|
||||
Das Ergebnis enthält die Sockets mit der Länge ihrer Warteschlange, dem
|
||||
TCP-Zustand, dem annehmenden Socket und den Sitzungswerten.
|
||||
|
||||
## Korpus
|
||||
|
||||
|
||||
Reference in New Issue
Block a user