Releases
v0.4.1
- Fix parsing of IPv6 addresses on Darwin.
v0.4.0
- Introduce native Linux implementation using
NETLINK_INET_DIAG. On Linux with thelinux/inet_diag.hkernel header available, listener stats are collected via a single netlink round-trip instead of parsing/proc/net/tcp. Falls back to the pure-Ruby implementation automatically if the extension cannot be built.
v0.3.1
- Introduce
Listener#fin_wait_count: connections inFIN_WAIT1orFIN_WAIT2state — server has sent FIN (initiated close) and is waiting for the peer to finish closing. Symmetric counterpart toclose_wait_count. - Introduce
Listener#time_wait_count: connections inTIME_WAITstate — both sides have closed; the kernel holds the socket for ~60s (2×MSL) to absorb delayed packets. High counts indicate fast connection churn. - Fix
parse_addressfor IPv6 listeners: replace non-existentAddrinfo.parsewith an explicit[ipv6addr].portpattern match.
v0.3.0
- Breaking Rename
Listenerfields:queue_size→queued_count,active_connections→active_count. - Introduce
Listener#close_wait_count: number of accepted connections inCLOSE_WAITstate (peer has closed; application still processing).
v0.2.1
- Fixed
queue_sizeunder-reporting when multipleSO_REUSEPORTsockets share the same address — queue depths are now accumulated across all sockets rather than overwritten by the last one. - Linux
Listener#active_connectionsfor TCP no longer counts sockets that are still in the kernel accept queue (those remain inqueue_size). Counts now match the usual “pastaccept()” meaning and align with tools such as Raindrops’ListenStats#active.
v0.2.0
- Breaking
IO::Metrics::Listener.capturereturns anArrayofListenerrows instead of aHashkeyed by address string. - Each
Listenerhasaddress(Addrinfofor TCP or Unix),queue_size, andactive_connections.Listener.zerosetsaddresstonil. JSON usesAddrinfo#inspect_sockaddrforaddress, ornullwhen absent.