pmd-pytcp 0.3.3
Bugfix release
tcp: orphaned FIN_WAIT_2 sessions were never reaped — a peer that vanished after ACKing our FIN pinned the TCB and its local port forever (#8, thanks @vToMy)
A connection whose socket the application has fully closed — an orphan, nobody can ever read the peer's remaining data — could sit in FIN_WAIT_2 indefinitely when the peer ACKed our FIN but never sent its own (crashed peer, silent network partition): FIN_WAIT_2 had no timer handler, and RFC 9293's unbounded FIN_WAIT_2 hold has no resource backstop. The stranded session kept its socket registered, permanently consuming its local port; under connection churn against unreliable peers this drained the ephemeral pool the same way #7's bug did, just more slowly.
Orphaned FIN_WAIT_2 sessions are now reaped after a timeout, matching Linux's net.ipv4.tcp_fin_timeout semantics — exposed as a new sysctl tcp.fin_wait_2.timeout_ms (default 60000, Linux parity). The reaper arms only when the connection becomes an orphan (socket fully closed); a shutdown(SHUT_WR) half-close with the socket still open is never reaped — the application may keep reading for as long as it likes, per RFC 9293 §3.6. The peer's FIN arriving in time cancels the reaper and hands off to TIME_WAIT's own 2MSL delay as before.
Only pmd-pytcp bumps (0.3.2 → 0.3.3); pmd-net-addr / pmd-net-proto stay at 0.0.3.