PingKit 0.7.0 adds bounded buffering and explicit local-overload errors, and fixes the issues found in the project diagnostic review.
Buffering and migration
PingBufferLimitsconfigures public-event and raw-datagram queues (defaults: 1,024 events and 256 datagrams).- A full queue stops the run with
PingError.bufferOverflow(buffer:capacity:). Buffered public events drain in order; outstanding probes are cancelled. Slow consumers do not change the configured probe cadence. - Add the new case to exhaustive
PingErrorswitches. An aborted run can expose a.sentevent without its terminal event. - Socket receive storage is reused, and queued packets retain only their actual bytes.
Fixes
- Wait before reusing an in-flight 16-bit sequence number; stale timeout callbacks cannot remove a newer probe (#22).
- Validate unicast reply sources, IPv6 link-local scopes, and quoted error destinations; retain Linux IPv4 source metadata (#23).
- Reject non-finite and unsafe CLI time arguments with a normal argument error (#24).
- Correct public-repository installation instructions and bound demo history to 500 rows (#25, #27).
- Require real IPv4/IPv6 loopback capability in official CI; keep appropriate local environment skips and surface unexpected syscall errors (#28).
- Stabilize asynchronous test waits on overloaded iOS simulators without weakening behavior assertions (#36).
Validation
macOS, iOS device build and simulator tests, and Linux Swift 6.0/6.1 CI passed. Both address families were exercised on real loopback sockets. DocC built successfully.
The library remains dependency-free. Platform support is unchanged: macOS 13+, iOS 16+, and Linux; IPv4 traceroute remains best-effort on Linux. This release includes source archives, without a prebuilt CLI binary.