Changes for version 0.031 - 2026-06-09
- Fix infinite retry loop in _write_burst() on hard syswrite errors such as EBADF; the pipe is now marked invalid and throws.
- Only consult $! when syswrite actually fails, avoiding misreads of stale errno after a successful write.
- Treat EWOULDBLOCK like EAGAIN on platforms where they differ.
- close() and reader() now flush output buffered by non-blocking writes instead of silently dropping it and croaking in DESTROY.
- DESTROY now localizes $., $@, $!, $^E and $? so a destructor flush cannot clobber the caller's error state.
- A truncated message header at EOF now throws instead of reading as a clean EOF.
- Fix eof() mixed-mode buffer check that inspected the wrong slot (lines vs burst).
- from_fh() and from_fd() now accept the same %params as the other constructors, as the docs already claimed.
- mixed_data_mode => 1 is now honored as a constructor param by all constructors, not just pair().
- fits_in_burst() followed by write_burst() no longer compresses the payload twice.
- SSIZE_MAX fallback raised from 512 to 32767 (_POSIX_SSIZE_MAX).
- Remove dead code (unused debug() helper, do_extra_loop bookkeeping).
- Documentation fixes: correct 16-byte chunk header description, max_size() fallback behavior, byte-string payload note, typos.
Documentation
Modules
Send atomic messages from multiple writers across a POSIX pipe.