Repository navigation
Releases: skill215/sctp
Release list
v0.7.2
SCTP stability fixes and portable resource ownership
v0.7.2 addresses all 14 confirmed defects/input-validation gaps tracked in
#1, #2, #4–#12 and #14–#16. It also implements the non-blocking #13 consistency
improvement. Go 1.26 remains the minimum; public signatures are preserved.
- Stop waiting after a single association terminates and another I/O consumes
its reset. Preserve live endpoints, peeled connections, buffered data, normal
shutdown, notification timeout budgets and Close wakeups. This fixes a
regression introduced in 0.5, not by the Go 1.26 migration. - Empty reads no longer discard data; header-only wrapped reads return EINVAL.
Reset/error reads never return negative counts or fictitious headers. - Initialize the full wrapper header, including zero metadata for notifications;
preserve existing subscriptions when enabling DATA_IO and surface setup errors. - Use actual zero-payload sendmsg for empty writes, retaining kernel control
semantics without injecting a byte. Correct SCTP_EOF to the Linux 0x200 value. - Copy address inputs, reject invalid ports and nil remote addresses before
socket/Control side effects, and reject empty multihoming host segments. - Query complete address lists with bounded ENOMEM growth from 4 KiB to a
documented 1 MiB address-area budget; never return partial failed queries. - Export ErrUnsupported consistently and provide Listener.SyscallConn stubs.
Failed unsupported constructors immediately release owned sockets with Unix
close or Windows closesocket, including fd=0, without later closing reused fds. - Return a nil net.Conn interface when Accept fails, preserving the original error.
Release publication requires all native Linux 1.26/1.27 × two-kernel jobs,
independent ten-process race/shuffle rounds, vet/checkptr/low-GOGC/fuzz checks,
three actual numeric-interface namespace tests per matrix cell, five-target
external consumers, README examples, Linux/386 and native Windows ownership
checks, and six-architecture QEMU ABI tests. QEMU checks do not claim full SCTP
protocol validation. The annotated canonical v0.7.2 tag preserves all old tags.
The library still exposes unsupported standard deadline methods and no new
ReadMsg or DialContext API. See README for socket timeouts, framing limitations,
empty operations, query budgets, and platform support.
0.7.1
SCTP reliability fixes and Go 1.26 minimum
Known issues confirmed by the 2026-10-30 audit:
- After a peer abort, reads can keep waiting if a Write has already consumed ECONNRESET.
- Concurrent listeners sharing a wildcard SCTPAddr can race because the library modifies the caller's address.
See the 0.7.1 audit and reproduction and v0.7.2 release goals. These defects remain present in this release.
Go 1.26 or later is now required. CI and release validation cover Go 1.26 and Go 1.27.
Changes:
- Preserve a single Read timeout budget while processing SCTP notifications, including wrapped reads.
- Fix socklen_t handling on big-endian architectures and remove the incorrect s390x pointer rewrite.
- Decode unaligned wrapped headers safely, return zero bytes on failed sends, and preserve complete-frame retries after timeouts.
- Use host byte order consistently for default-send PPID parameters.
- Decode mixed IPv4/IPv6 address lists with bounds checks and handle Linux's different local/peer address length conventions.
- Set CLOEXEC on peeled sockets, with a fork-safe fallback for older kernels.
- Support numeric IPv6 zone indexes while giving existing interface names precedence, including numeric names.
- Normalize the empty network name to sctp and reject unsupported names before opening a socket.
- Modernize binary encoding/decoding, native byte order, atomics, goroutine accounting, and examples for Go 1.26.
- Handle restricted user namespaces in tests and require isolated numeric-interface regression coverage in CI.
Validation:
- Repeated full race tests on Go 1.26 and Go 1.27, plus strict checkptr and low-GOGC checks.
- Regression tests for notification deadlines, descriptors, PPID, mixed addresses, interface-name/index conflicts, alignment, and truncated ancillary data.
- Release publication requires three isolated numeric-interface regression runs per Go version and ten full race-test runs on each Go version and ABI/codec regressions on ARM, ARM64, MIPS, MIPS64, PPC64, and s390x under QEMU.
0.6
Restore SCTP socket timeouts across polling and connection setup
0.5
Fix SCTP socket lifetimes, raw I/O, and ABI regressions
0.4
Publish tagged releases after repeated race tests
init release
update go version
0.2 update go version
init draft release
Fixes optlen in getsockopt() for s390x Signed-off-by: Prashant-Jagtap <Prashant.Jagtap@ibm.com>