Releases: kotauskas/interprocess
Releases · kotauskas/interprocess
2.4.0
General
- Concurrency prevention for local sockets has been removed. It is now possible to perform I/O on the same local socket stream from multiple threads at once without encountering any panics.
spliton local socket streams has been soft-deprecated due to being identical in functionality and performance characteristics to putting the local socket stream into anRcorArc. Deprecation warnings will not be emitted for programs that usesplit, but replacing it withRcorArcis preferred.peer_pidis back in style: local socket streams now have apeer_credsmethod that returns the credentials of the other side of the connection. Those include the process ID, effective user and group ID, and list of supplementary groups.
Windows
- Fixed an embarrassing memory leak in the linger pool. Versions 2.3.0 and 2.3.1 would leak a small amount of memory for every Tokio-based stream lingered.
- Fixed a benign use-after-free bug in
MaybeArc::try_make_owned(called inreunite) that was introduced in version 2.0.0. To my knowledge, it is not possible to trigger undefined behavior from safe code using this bug. - Synchronous named pipes now use overlapped I/O, just like Tokio-based ones. This allows for concurrent I/O operations on the same stream as described in General. Thanks to Sebastian Schöner for his blog post that prompted me to carefully reread Microsoft documentation and guided me toward the solution!
- All owned handles now provide one sentinel value for niche optimization (via
NonZeroIsize, since 0 is not a valid handle value).
2.3.1
2.3.0
General
- Now licensed under the 0-clause BSD license.
- Added
local_socket::ListenerOptions::try_overwriteto streamline the common case of dealing with "address in use" errors. - Added
local_socket::ConnectOptions, allowing clients to specify the connection timeout and make use of zero-cost nonblocking mode enablement. - Local socket implementation wrappers now have accessors for their underlying implementations (
os::unix::uds_local_socket::Stream::inner,os::windows::named_pipe::local_socket::Stream::inner, and so on). - A neat little tool,
inspect-platform, has been added to help investigate the behavior of platforms that Interprocess has previously not been ported to. - Miscellaneous improvements to documentation and examples.
Windows
- Added
AsSecurityDescriptorExt::write_to_security_attributes_ptrto work aroundwindows-sysversion churn (see #84). - Unnamed pipes are now inheritable. Previously, they were documented as such, but defaulted to not being inheritable due to a typo.
os::windows::named_pipe::tokio::PipeListenerOptionsExthas been deprecated in favor of inherent methods fulfilling the same function. The deprecation warning can be fixed by simply removing the import.- Fixed panic when dropping Tokio-based Windows named pipes outside of a Tokio runtime (#71) by replacing the old "limbo" with a new linger pool, used both for sync named pipes and for Tokio ones. This new implementation is more efficient and more maintainable.
- The aforementioned bug now has test coverage.
- Fixed handling of dead-on-arrival conections (#86).
Unix
SpecialDirUdSocketis now deprecated due to complicated and potentially undesirable fallback behavior.- Name types for more specific special directories, such as "current user only" (
/run/user/<uid>), "world-writable" (/tmp), "root-writable and world-readable" (/run) will be added in a future version.
- Name types for more specific special directories, such as "current user only" (
ListenerOptionsExt::modehas been improved:- The
umaskfallback has been removed – the method will now returnErrorKind::Unsupportedon platforms on which the mode of a Unix domain socket listener cannot be changed atomically. - The documentation now more accurately describes the behavior of non-default modes on different platforms.
- The
set_nonblockingmethods now useFIONBIOon Linux to reduce the number of system calls. Additionally, some superfluousfcntl(F_GETFL)calls have been optimized out on other platforms.- Unix domain socket address handling has been refactored to be more efficient.
- NetBSD has been promoted from Support by association to Explicit support without CI.
2.2.3
- Minor fixes in documentation and examples.
- Platform implementations of Tokio local sockets are now public. "Click the struct name in the parentheses to learn more" tantalizes the diligent reader no more, for the struct name is now indeed clickable.
2.2.2 – fix for Android
Fixes the build on Android.
2.2.1
Reverted the change from hardcoded /tmp to $TMPDIR for SpecialDirUdSocket on non-Android platforms. On Android, the hardcoded path is now /data/local/tmp.
2.2.0 – Tokio unnamed pipes
- Tokio-based unnamed pipes, with subpar performance on Windows due to OS API limitations
- Examples for unnamed pipes, both non-async and Tokio
- Impersonation for Windows named pipes
- Improvements to the implementation of Windows pipe flushing on Tokio
2.1.1
- Removed async
Incomingandfutures::Stream("AsyncIterator") implementations onlocal_socket::traits::Listenerimplementors – those were actually completely broken, so this change is not breaking in practice and thus does not warrant a bump to 3.0.0 - Fixed
ListenerOptionsExt::mode()behavior inumaskfallback mode and improved its documentation - Moved examples to their own dedicated files with the help of the
doctest-filecrate