You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Last tag: 0.2.3, cut 2026-07-20 (30 days ago). 4 commits on master since.
No CHANGELOG.md in this repo, so this is from the commit log:
Fixed: binding and send-to now try every address candidate (Try every address candidate when binding and when sending a datagram #14). resolve_address took the first addrinfogetaddrinfo returned and freed the rest, so the passive path and UdpSocket.send-to inherited whatever the resolver happened to order first (TcpStream.connect already looped). Two user-visible failures followed: a UdpSocket bound to 127.0.0.1 and asked to send-to "localhost" resolved the destination without regard for its own family, so where getaddrinfo returns ::1 first, sendto got an AF_INET6 sockaddr on an AF_INET socket and failed with EAFNOSUPPORT; and TcpListener.bind / UdpSocket.bind created a socket of the first candidate's family and gave up if socket() or bind() failed, even when a later candidate would have bound — a host whose /etc/hosts lists ::1 localhost while IPv6 is unavailable, or ::1 already occupied. bind_address now owns socket creation and iterates socket() → setsockopt → bind(), failing only when every candidate does. bind()'s errno is saved across close() so the reported message is still the bind failure, and resolve_address keeps first-candidate behaviour when nothing matches, so numeric hosts are unaffected.
Proposed bump: patch → 0.2.4. A behaviour fix to existing functions; no signature changed and nothing was added or removed. SO_REUSEADDR/SO_REUSEPORT stay TCP-only and IPV6_V6ONLY is deliberately left at the host default, so existing wildcard binds are untouched.
CI is green on both runners at master.
Opened by the carpentry-org heartbeat agent (Claude). Veit has not reviewed this yet.
Last tag: 0.2.3, cut 2026-07-20 (30 days ago). 4 commits on
mastersince.No
CHANGELOG.mdin this repo, so this is from the commit log:send-tonow try every address candidate (Try every address candidate when binding and when sending a datagram #14).resolve_addresstook the firstaddrinfogetaddrinforeturned and freed the rest, so the passive path andUdpSocket.send-toinherited whatever the resolver happened to order first (TcpStream.connectalready looped). Two user-visible failures followed: aUdpSocketbound to127.0.0.1and asked tosend-to "localhost"resolved the destination without regard for its own family, so wheregetaddrinforeturns::1first,sendtogot anAF_INET6sockaddr on anAF_INETsocket and failed withEAFNOSUPPORT; andTcpListener.bind/UdpSocket.bindcreated a socket of the first candidate's family and gave up ifsocket()orbind()failed, even when a later candidate would have bound — a host whose/etc/hostslists::1 localhostwhile IPv6 is unavailable, or::1already occupied.bind_addressnow owns socket creation and iteratessocket()→setsockopt→bind(), failing only when every candidate does.bind()'s errno is saved acrossclose()so the reported message is still the bind failure, andresolve_addresskeeps first-candidate behaviour when nothing matches, so numeric hosts are unaffected.TcpListener/TcpStreamAPI (Rewrite the examples against the current TcpListener/TcpStream API #15) — they had rotted against a since-changed API.Proposed bump: patch → 0.2.4. A behaviour fix to existing functions; no signature changed and nothing was added or removed.
SO_REUSEADDR/SO_REUSEPORTstay TCP-only andIPV6_V6ONLYis deliberately left at the host default, so existing wildcard binds are untouched.CI is green on both runners at
master.Opened by the carpentry-org heartbeat agent (Claude). Veit has not reviewed this yet.