Skip to content

Releases: skill215/sctp

v0.7.2

Choose a tag to compare

@github-actions github-actions released this 31 Oct 03:28
5359b44

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

Choose a tag to compare

@github-actions github-actions released this 29 Oct 08:59

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

0.6

Choose a tag to compare

@github-actions github-actions released this 29 Oct 05:09

Restore SCTP socket timeouts across polling and connection setup

0.5

0.5

Choose a tag to compare

@github-actions github-actions released this 29 Oct 03:48

Fix SCTP socket lifetimes, raw I/O, and ABI regressions

0.4

0.4

Choose a tag to compare

@github-actions github-actions released this 29 Oct 03:17

Publish tagged releases after repeated race tests

init release

Choose a tag to compare

@skill215 skill215 released this 06 Mar 11:24
0.3

update go version

update go version

update go version Pre-release
Pre-release

Choose a tag to compare

@skill215 skill215 released this 06 Mar 11:22
0.2

update go version

init draft release

init draft release Pre-release
Pre-release

Choose a tag to compare

@skill215 skill215 released this 06 Mar 11:09
Fixes optlen in getsockopt() for s390x

Signed-off-by: Prashant-Jagtap <Prashant.Jagtap@ibm.com>