Version 0.8.2 - (2023-12-05)
- #89 Fixed generator expression for older CMake
- #91 Fixed uniform_int_distribution<> in UNIX socket example
Released: 2023-01-30
- Cherry picked most of the non-TLS commits in PR #17
- Connector timeouts
- Stateless reads & writes for streaming sockets w/ functions returning
ioresult
- Some small bug fixes
- No shutdown on invalid sockets
- #38 Made system libs public for static builds to fix Windows
- #73 Clone a datagram (UDP) socket
- #74 Added
<sys/time.h>
to properly gettimeval
in *nix builds. - #56 handling unix paths with maximum length (no NUL term)
- Fixed outstanding build warnings on Windows when using MSVC
Released: 2023-01-17
- [Breaking] Library initializer now uses a static singleton created via
socket_initializer::initialize()
call, which can be called repeatedly with no ill effect. Also added globalsocketpp::initialize()
function as shortcut. - Improvements to CMake to better follow modern standards.
- CMake required version bumped up to 3.12
- Generating CMake files for downstream projects (config, target, version)
- Windows builds default to shared DLL, not static library
- Lots of cleanup
Released: 2022-01-24
- [Experimental] SocketCAN, CAN bus support on Linux
- #37 socket::get_option() not returning length on Windows
- #39 Using SSIZE_T for ssize_t in Windows
- #53 Add Conan support
- #55 Fix Android strerror
- #60 Add missing move constructor for connector template.
- Now
acceptor::open()
uses the SO_REUSEPORT option instead of SO_REUSEADDR on non-Windows systems. Also made reuse optional.
- Base
socket
classshutdown()
addedcreate()
addedbind()
moved into base socket (fromacceptor
)
- Unix-domain socket pairs (stream and datagram)
- Non-blocking I/O
- Scatter/Gather I/O
stream_socket
cloning.- Set and get socket options using template types.
stream_socket::read_n()
andwrite_n()
now properly handle EINTR return.to_timeval()
can convert from anystd::chrono::duration
type.socket::close()
andshutdown()
check for errors, set last error, and return a bool.- tcpechomt.cpp: Example of a client sharing a socket between read and write threads - using
clone()
. - Windows enhancements:
- Implemented socket timeouts on Windows
- Fixed bug in Windows socket cloning.
- Fixed bug in Windows
socket::last_error_string
. - Unit tests working on Windows
- More unit tests
- UDP support
- The base
datagram_socket
added to the Windows build - The
datagram_socket
cleaned up for proper parameter and return types. - New
datagram_socket_tmpl
template class for defining UDP sockets for the different address families. - New datagram classes for IPv4 (
udp_socket
), IPv6 (udp6_socket
), and Unix-domain (unix_dgram_socket
)
- The base
- Windows support
- Windows support was broken in release v0.5. It is now fixed, and includes the UDP features.
- Proper move semantics for stream sockets and connectors.
- Separate tcp socket header files for each address family (
tcp_socket.h
,tcp6_socket.h
, etc). - Proper implementation of Unix-domain streaming socket.
- CMake auto-generates a version header file, version.h
- CI dropped tests for gcc-4.9, and added support for clang-7 and 8.
- (Breaking change) Updated the hierarchy of network address classes, now derived from a common base class.
- Removed
sock_address_ref
class. Now a C++ reference tosock_address
will replace it (i.e.sock_address&
). sock_address
is now an abstract base class.- All the network address classes now derive from
sock_address
- Consolidates a number of overloaded functions that took different forms of addresses to just take a
const sock_address&
- Adds a new
sock_address_any
class that can contain any address, and is used by base classes that need a generic address.
- Removed
- The
acceptor
andconnector
classes are still concrete, generic classes, but now a template derives from each of them to specialize. - The connector and acceptor classes for each address family (
tcp_connector
,tcp_acceptor
,tcp6_connector
, etc) are now typedef'ed to template specializations. - The
acceptor::bind()
andacceptor::listen()
methods are now public. - CMake build now honors the
CMAKE_BUILD_TYPE
flag.
The work in this branch is proceeding to add support for IPv6 and refactor the class hierarchies to better support the different address families without so much redundant code.
- IPv6 support:
inet6_address
,tcp6_acceptor
,tcp_connector
, etc. - (Breaking change) The
sock_address
class is now contains storage for any type of address and follows copy semantics. Previously it was a non-owning reference class. That reference class now exists assock_addresss_ref
. - Generic base classses are being re-implemented to use sock_address and sock_address_ref as generic addresses.
- (Breaking change) In the
socket
class(es) thebool address(address&)
andbool peer_address(addr&)
forms of getting the socket addresses have been removed in favor of the ones that simply return the address. Addedget_option()
andset_option()
methods to the basesocket
class. - The GNU Make build system (Makefile) was deprecated and removed.
- Socket class hierarcy now splits out for streaming and datagram sockets.
- Support for UNIX-domain sockets.
- New modern CMake build system.
- GNU Make system marked for deprecation.
- Initial working version for IPv4.
- API using boolean return values for pass/fail functions instead of syscall-style integers.