Skip to content

PingKit 0.3.0

Choose a tag to compare

@gewill gewill released this 13 Jul 14:41
· 23 commits to main since this release

New

Receive ordering guarantee

Socket receive callbacks now flow through a single AsyncStream pipeline consumed by one task, so replies reach Pinger/Tracer in socket delivery order. Previously each datagram was dispatched in its own unstructured Task, which could reorder bursts of replies before they reached the actor. A 100-reply burst regression test covers the new behavior.

Breaking (0.x)

  • Public API narrowed: PingSocket, MonotonicTimestamp, Pinger.SocketFactory, and Pinger.HostResolver are now internal. They existed only for internal test injection; a redesigned, stable socket-injection API is a 0.4 candidate driven by real-world demand (see PLAN.md §6.3).
  • PingError.responsesAlreadyConsumed renamed to sequenceAlreadyConsumed: the single-consumer error now applies uniformly to Pinger.responses and Tracer.hops, with a message that no longer wrongly refers to Pinger when thrown by Tracer.

CI

The Linux matrix now also verifies Swift 6.0, keeping the declared minimum toolchain continuously tested alongside 6.1.

Known limitations

Unchanged from 0.2.0: on Linux, ICMP errors go to the socket error queue (MSG_ERRQUEUE), which PingKit doesn't read yet — traceroute intermediate hops show as timeouts there.

🤖 Generated with Claude Code